245 lines
7.6 KiB
PHP
Executable File
245 lines
7.6 KiB
PHP
Executable File
<?php
|
|
|
|
namespace IpSupply\ChatMessage\Api\Controller;
|
|
|
|
use GuzzleHttp\Client;
|
|
use GuzzleHttp\Psr7\Request as GuzzRequest;
|
|
use IpSupply\ChatMessage\Api\Interface\MessageApiInterface;
|
|
use IpSupply\ChatMessage\Config\ChatConfig;
|
|
use Magento\Framework\App\Helper\AbstractHelper;
|
|
use Magento\Framework\App\Helper\Context;
|
|
use Magento\Framework\Webapi\Rest\Request;
|
|
|
|
class MessageApi extends AbstractHelper implements MessageApiInterface {
|
|
protected $_request;
|
|
protected $_chatConfig;
|
|
|
|
public function __construct(Context $context, Request $request) {
|
|
$this->_request = $request;
|
|
// $this->_chatConfig = $_chatConfig;
|
|
parent::__construct($context);
|
|
}
|
|
|
|
public function getMessage() {
|
|
try {
|
|
$topic = $this->_request->getParams()["topic"];
|
|
$streamName = $this->_chatConfig->getStreamName();
|
|
$client = new Client();
|
|
$headers = [
|
|
'Authorization' => $this->_chatConfig->getZulipAuthToken()
|
|
];
|
|
$url = $this->_chatConfig->getHostDomain().'api/v1/messages?anchor=newest&num_before=100&num_after=0&narrow=[{"operator":"stream","operand":"'.$streamName.'"},{"operator":"topic","operand":"'.$topic.'"}]&apply_markdown=false';
|
|
$request = new GuzzRequest('GET', $url, $headers);
|
|
$promise = $client->sendAsync($request)->then(function ($response) {
|
|
echo $response->getBody();
|
|
exit();
|
|
});
|
|
$promise->wait();
|
|
}
|
|
catch (\Exception $e) {
|
|
return json_encode(["code" => 500, "message" => "Error".$e]);
|
|
}
|
|
}
|
|
|
|
public function getMessageUnRead() {
|
|
try {
|
|
$topic = $this->_request->getParams()["topic"];
|
|
$streamName = $this->_chatConfig->getStreamName();
|
|
$client = new Client();
|
|
$headers = [
|
|
'Authorization' => $this->_chatConfig->getZulipAuthToken()
|
|
];
|
|
$url = $this->_chatConfig->getHostDomain().'api/v1/messages?anchor=first_unread&num_before=0&num_after=99&narrow=[{"operator":"stream","operand":"'.$streamName.'"},{"operator":"topic","operand":"'.$topic.'"}]&apply_markdown=false';
|
|
$request = new GuzzRequest('GET', $url, $headers);
|
|
$promise = $client->sendAsync($request)->then(function ($response) {
|
|
echo $response->getBody();
|
|
exit();
|
|
});
|
|
$promise->wait();
|
|
}
|
|
catch (\Exception $e) {
|
|
return json_encode(["code" => 500, "message" => "Error".$e]);
|
|
}
|
|
}
|
|
|
|
public function registerQueue() {
|
|
try {
|
|
$topic = $this->_request->getParams()["topic"];
|
|
$streamName = $this->_chatConfig->getStreamName();
|
|
$client = new Client();
|
|
$headers = [
|
|
'Authorization' => $this->_chatConfig->getZulipAuthToken()
|
|
];
|
|
$options = [
|
|
'multipart' => [
|
|
[
|
|
'name' => 'event_types',
|
|
'contents' => '["message"]',
|
|
],
|
|
[
|
|
'name' => 'narrow',
|
|
'contents' => '[["stream", "'.$streamName.'"], ["topic", "'.$topic.'"]]',
|
|
]
|
|
]
|
|
];
|
|
$request = new GuzzRequest('POST', $this->_chatConfig->getHostDomain().'api/v1/register', $headers);
|
|
$promise = $client->sendAsync($request, $options)->then(function ($response) {
|
|
echo $response->getBody();
|
|
exit();
|
|
});
|
|
$promise->wait();
|
|
}
|
|
catch (\Exception $e) {
|
|
return json_encode(["code" => 500, "message" => "Error".$e]);
|
|
}
|
|
}
|
|
|
|
public function listenMessage() {
|
|
try {
|
|
$params = $this->_request->getParams();
|
|
$queueId = $params["queue_id"];
|
|
$lastEventId = $params["last_event_id"];
|
|
$client = new Client();
|
|
$headers = [
|
|
'Authorization' => $this->_chatConfig->getZulipAuthToken()
|
|
];
|
|
$url = $this->_chatConfig->getHostDomain().'api/v1/events?queue_id='.$queueId.'&last_event_id='.$lastEventId;
|
|
$request = new GuzzRequest('GET', $url, $headers);
|
|
$promise = $client->sendAsync($request)->then(function ($response) {
|
|
echo $response->getBody();
|
|
exit();
|
|
});
|
|
$promise->wait();
|
|
}
|
|
catch (\Exception $e) {
|
|
return json_encode(["code" => 500, "message" => "Error".$e]);
|
|
}
|
|
}
|
|
|
|
public function sendMessage() {
|
|
try {
|
|
$params = $this->_request->getParams();
|
|
$content = $params["content"];
|
|
$topic = $params["topic"];
|
|
$streamName = $this->_chatConfig->getStreamName();
|
|
|
|
$client = new Client();
|
|
$headers = [
|
|
'Authorization' => $this->_chatConfig->getZulipAuthToken()
|
|
];
|
|
$url = $this->_chatConfig->getHostDomain().'api/v1/messages';
|
|
$options = [
|
|
'multipart' => [
|
|
[
|
|
'name' => 'to',
|
|
'contents' => $streamName,
|
|
],
|
|
[
|
|
'name' => 'type',
|
|
'contents' => 'stream',
|
|
],
|
|
[
|
|
'name' => 'topic',
|
|
'contents' => $topic,
|
|
],
|
|
[
|
|
'name' => 'content',
|
|
'contents' => $content,
|
|
]
|
|
]
|
|
];
|
|
$request = new GuzzRequest('POST', $url, $headers);
|
|
$promise = $client->sendAsync($request, $options)->then(function ($response) {
|
|
return json_encode(["code" => 200, "message" => "Success"]);
|
|
});
|
|
$promise->wait();
|
|
}
|
|
catch (\Exception $e) {
|
|
return json_encode(["code" => 500, "message" => "Error".$e]);
|
|
}
|
|
}
|
|
|
|
public function markTopicAsRead() {
|
|
try {
|
|
$params = $this->_request->getParams();
|
|
$topic = $params["topic"];
|
|
$streamID = $this->_chatConfig->getStreamID();
|
|
|
|
$client = new Client();
|
|
$headers = [
|
|
'Authorization' => $this->_chatConfig->getZulipAuthToken()
|
|
];
|
|
$url = $this->_chatConfig->getHostDomain().'api/v1/mark_topic_as_read';
|
|
$options = [
|
|
'multipart' => [
|
|
[
|
|
'name' => 'stream_id',
|
|
'contents' => $streamID,
|
|
],
|
|
[
|
|
'name' => 'topic_name',
|
|
'contents' => $topic,
|
|
]
|
|
]
|
|
];
|
|
$request = new GuzzRequest('POST', $url, $headers);
|
|
$promise = $client->sendAsync($request, $options)->then(function ($response) {
|
|
return json_encode(["code" => 200, "message" => "Success"]);
|
|
});
|
|
$promise->wait();
|
|
}
|
|
catch (\Exception $e) {
|
|
return json_encode(["code" => 500, "message" => "Error".$e]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Api for make offer
|
|
* @param string[] $data
|
|
* @return string
|
|
*/
|
|
public function makeAnOffer($data) {
|
|
try {
|
|
$topic = $data["customer-email"];
|
|
// $streamName = $this->_chatConfig->getStreamMakeOffer();
|
|
$streamName = $this->_chatConfig->getStreamName();
|
|
$content = "Product: [".$data["product-sku"]."](".$data["product-url"].") \nSell Price: **".$data["product-sell-price"]."** \nCustomer Offer Price: **".$data["customer-offer"]."** \nCustomer: ".$data["customer-name"]." \nEmail: ".$data["customer-email"]." \nPhone: ".$data["customer-mobile-phone"]." \nCustomer shipping destination: ".$data["customer-country"]." \nMessage: ".$data["customer-message"];
|
|
|
|
$client = new Client();
|
|
$headers = [
|
|
'Authorization' => $this->_chatConfig->getZulipAuthToken()
|
|
];
|
|
$url = $this->_chatConfig->getHostDomain().'api/v1/messages';
|
|
$options = [
|
|
'multipart' => [
|
|
[
|
|
'name' => 'to',
|
|
'contents' => $streamName,
|
|
],
|
|
[
|
|
'name' => 'type',
|
|
'contents' => 'stream',
|
|
],
|
|
[
|
|
'name' => 'topic',
|
|
'contents' => $topic,
|
|
],
|
|
[
|
|
'name' => 'content',
|
|
'contents' => $content,
|
|
]
|
|
]
|
|
];
|
|
$request = new GuzzRequest('POST', $url, $headers);
|
|
$promise = $client->sendAsync($request, $options)->then(function ($response) {
|
|
return true;
|
|
});
|
|
$promise->wait();
|
|
return $request->getBody()->getContents();
|
|
}
|
|
catch (\Exception $e) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|