Spaces:
Runtime error
Runtime error
File size: 6,456 Bytes
46252cd | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 | <?php
declare(strict_types=1);
namespace OpenWA\Resources;
use OpenWA\Http\HttpExecutor;
/**
* Messages resource — sending and querying messages.
*
* Backed by src/modules/message/message.controller.ts.
* NOTE: the real paths use the /send- prefix, e.g. /messages/send-text.
*/
class MessagesResource
{
private HttpExecutor $http;
public function __construct(HttpExecutor $http)
{
$this->http = $http;
}
/**
* List messages, optionally filtered by chat or sender. Returns a page shaped
* {messages: list, total: count} — iterate over the `messages` field, not the
* result itself. Consistent with the JavaScript, Python, and Java SDKs.
*
* @param array<string,mixed> $query
* @return array{messages: array<int,array<string,mixed>>, total: int}
*/
public function list(string $sessionId, array $query = []): array
{
return $this->http->request('GET', "/api/sessions/{$this->http->encodeSegment($sessionId)}/messages", $query)
?? ['messages' => [], 'total' => 0];
}
/**
* @param array<string,mixed> $body
* @return array<string,mixed>
*/
public function sendText(string $sessionId, array $body): array
{
return $this->http->request('POST', "/api/sessions/{$this->http->encodeSegment($sessionId)}/messages/send-text", [], $body);
}
/**
* @param array<string,mixed> $body
* @return array<string,mixed>
*/
public function sendImage(string $sessionId, array $body): array
{
return $this->sendMedia($sessionId, 'send-image', $body);
}
/** @return array<string,mixed> */
public function sendVideo(string $sessionId, array $body): array
{
return $this->sendMedia($sessionId, 'send-video', $body);
}
/** @return array<string,mixed> */
public function sendAudio(string $sessionId, array $body): array
{
return $this->sendMedia($sessionId, 'send-audio', $body);
}
/** @return array<string,mixed> */
public function sendDocument(string $sessionId, array $body): array
{
return $this->sendMedia($sessionId, 'send-document', $body);
}
/** @return array<string,mixed> */
public function sendSticker(string $sessionId, array $body): array
{
return $this->sendMedia($sessionId, 'send-sticker', $body);
}
/** @return array<string,mixed> */
private function sendMedia(string $sessionId, string $segment, array $body): array
{
return $this->http->request('POST', "/api/sessions/{$this->http->encodeSegment($sessionId)}/messages/{$this->http->encodeSegment($segment)}", [], $body);
}
/** @return array<string,mixed> */
public function sendLocation(string $sessionId, array $body): array
{
return $this->http->request('POST', "/api/sessions/{$this->http->encodeSegment($sessionId)}/messages/send-location", [], $body);
}
/** @return array<string,mixed> */
public function sendContact(string $sessionId, array $body): array
{
return $this->http->request('POST', "/api/sessions/{$this->http->encodeSegment($sessionId)}/messages/send-contact", [], $body);
}
/** @return array<string,mixed> */
public function sendTemplate(string $sessionId, array $body): array
{
return $this->http->request('POST', "/api/sessions/{$this->http->encodeSegment($sessionId)}/messages/send-template", [], $body);
}
/** @return array<string,mixed> */
public function reply(string $sessionId, array $body): array
{
return $this->http->request('POST', "/api/sessions/{$this->http->encodeSegment($sessionId)}/messages/reply", [], $body);
}
/** @return array<string,mixed> */
public function forward(string $sessionId, array $body): array
{
return $this->http->request('POST', "/api/sessions/{$this->http->encodeSegment($sessionId)}/messages/forward", [], $body);
}
/** @return array<string,mixed> */
public function react(string $sessionId, array $body): array
{
return $this->http->request('POST', "/api/sessions/{$this->http->encodeSegment($sessionId)}/messages/react", [], $body);
}
/** @return array<string,mixed> */
public function delete(string $sessionId, array $body): array
{
return $this->http->request('POST', "/api/sessions/{$this->http->encodeSegment($sessionId)}/messages/delete", [], $body);
}
/**
* Edit the text of a message sent by this account. Body is
* {chatId, messageId, body}; 404 when the message is not found.
*
* @param array<string,mixed> $body
* @return array<string,mixed>
*/
public function editMessage(string $sessionId, array $body): array
{
return $this->http->request('POST', "/api/sessions/{$this->http->encodeSegment($sessionId)}/messages/edit", [], $body);
}
/**
* @param array<string,mixed> $query
* @return array<int,array<string,mixed>>
*/
public function history(string $sessionId, string $chatId, array $query = []): array
{
return $this->http->request('GET', "/api/sessions/{$this->http->encodeSegment($sessionId)}/messages/{$this->http->encodeSegment($chatId)}/history", $query) ?? [];
}
/** @return array<int,array<string,mixed>> */
public function reactions(string $sessionId, string $chatId, string $messageId): array
{
return $this->http->request('GET', "/api/sessions/{$this->http->encodeSegment($sessionId)}/messages/{$this->http->encodeSegment($chatId)}/{$this->http->encodeSegment($messageId)}/reactions") ?? [];
}
/** @return array<string,mixed> */
public function sendBulk(string $sessionId, array $body): array
{
return $this->http->request('POST', "/api/sessions/{$this->http->encodeSegment($sessionId)}/messages/send-bulk", [], $body);
}
/** @return array<string,mixed> */
public function batchStatus(string $sessionId, string $batchId): array
{
return $this->http->request('GET', "/api/sessions/{$this->http->encodeSegment($sessionId)}/messages/batch/{$this->http->encodeSegment($batchId)}");
}
/** @return array<string,mixed> */
public function cancelBatch(string $sessionId, string $batchId): array
{
return $this->http->request('POST', "/api/sessions/{$this->http->encodeSegment($sessionId)}/messages/batch/{$this->http->encodeSegment($batchId)}/cancel");
}
}
|