Работа с редактируемыми и удаленными сообщениями#
Бета-версия
Функциональность находится в стадии бета-тестирования. Функции могут быть изменены, а также могут работать нестабильно.
Рекомендации по работе с редактируемыми и удаленными сообщениями:
1. Настройка инстанса
2. Работа с редактируемыми сообщениями
3. Работа с удаленными сообщениями
1. Настройка инстанса#
Для работы с уведомлениями о редактируемых и удаленных сообщениях требуется включить настройки на инстансе editedMessageWebhook
и deletedMessageWebhook
(по умолчанию настройки отключены).
Включение настройки можно сделать через:
-
Личный кабинет, в настройках инстанса;
-
Метод установки настроек SetSettings указав
"editedMessageWebhook":"yes"
,"deletedMessageWebhook":"yes"
; -
Метод партнера CreateInstance указав
"editedMessageWebhook":"yes"
,"deletedMessageWebhook":"yes"
при создании инстанса;
2. Работа с редактируемыми сообщениями#
Метод EditMessage#
При вызове метода EditMessage в ответ Вы получите idMessage
, это идентификатор редактируемого сообщения, по нему можно в дальнейшем получить уведомление о результате выполнения редактирования, так же можно отслеживать какой именно пользователь сделал редактирование сообщения (если в системе находится несколько операторов).
Обработка уведомлений#
При редактировании сообщения получателем, отправителем через API или устройство формируется уведомление типа editedMessageWebhook
.
Требуется сделать обработку данного уведомления, а именно отслеживать поле stanzaId
, в нем будет указано оригинальное сообщение, которое было исправлено Вами или Вашим собеседником. Необходимо зафиксировать данные изменения у Вас в базе и обновить данные на клиентской части интеграции.
Поле textMessage
содержит новый текст сообщения.
Рекомендуем делать обработку только требуемых Вам уведомлений, Ваш сервис обработчика должен найти обязательное поле
typeWebhook
и в зависимости от его типа обработать или сбросить уведомление, так Вы будете обрабатывать только нужные Вам типы событий, а неверные настройки инстанса или выходы новых релизов API не нарушат работу Вашей интеграции.
Работа через журналы#
При работе через методы журналирования, определение редактированного сообщения можно делать по полю isEdited: true
.
Для актуализации переписки в чате требуется определять сообщения, которые были получены или отправлены за последние 15 минут (допустимое время редактирования сообщений) и производить их обновления каждые 10-15 секунд методом GetChatHistory.
Также обновление оригинального сообщения можно производить методом GetMessage, запросив сообщение из журнала, оно будет содержать последние данные по обновленному сообщению и будет иметь поле isEdited: true
.
Обратите внимание#
-
Уведомления о редактируемых сообщениях приходят по всем типам сообщений (входящие, исходящие, отправленные с АПИ и с телефона), в зависимости от этого будет указан тип уведомления
incomingMessageReceived
,outgoingAPIMessageReceived
,outgoingMessageReceived
. -
В журналах отредактированные сообщения будут иметь разные типы
outgoing
иincoming
в зависимости от того кто отредактировал сообщение: Вы или Ваш собеседник. В журнале будет только запись с оригинальным сообщением и полемisEdited: true
, указывающим, что сообщение редактировалось. -
Метод редактирования сообщений работает через очередь сообщений и если на инстансе выполнялась рассылка и образовалась очередь то редактирование не произойдет мгновенно, а только в тот момент, когда сообщение будет взято в обработку.
-
Если обработка редактируемого сообщения системой не произойдет в течение 15 минут с момента написания оригинального сообщения, то изменение сообщения не произойдет, а на запрос редактирования сообщения будет сформировано уведомление с ошибкой редактирования сообщения (
статус failed
), в описании уведомления будет указана причина ошибки полеdescription
. -
Если неверно указано сообщение при вызове метода, то сформируется уведомление с ошибкой редактирования сообщения (
статус failed
), в описании уведомления будет указана причина ошибки полеdescription
.
3. Работа с удаленными сообщениями#
Метод DeleteMessage#
При вызове метода DeleteMessage в ответ Вы получите статус код 200 и пустое тело.
Система формирует идентификатор события удаления сообщения, данный идентификатор будет указан в уведомлении по событию удаления сообщения.
Обработка уведомлений#
При удалении сообщения получателем, отправителем через API или устройство формируется уведомление типа deletedMessageWebhook
.
Требуется сделать обработку данного уведомления, а именно отслеживать поле stanzaId
, в нем будет указано оригинальное сообщение, которое было удалено Вами или Вашим собеседником. Необходимо зафиксировать данные изменения у Вас в базе и обновить данные на клиентской части интеграции.
Рекомендуем делать обработку только требуемых Вам уведомлений, Ваш сервис обработчика должен найти обязательное поле
typeWebhook
и в зависимости от его типа обработать или сбросить уведомление, так Вы будете обрабатывать только нужные Вам типы событий, а неверные настройки инстанса или выходы новых релизов API не нарушат работу Вашей интеграции.
Работа через журналы#
При работе через методы журналирования, определение удаленного сообщения можно делать по полю isDeleted: true
.
Для актуализации переписки в чате требуется производить их обновления каждые 10-15 секунд методом GetChatHistory.
Так же обновление оригинального сообщения можно производить методом GetMessage запросив сообщение из журнала, оно будет содержать последние данные по удаленному сообщению и будет иметь поле isDeleted: true
.
Обратите внимание#
-
Уведомления о удаленных сообщениях приходят по всем типам сообщений (входящие, исходящие отправленные с АПИ и с телефона), в зависимости от этого будет указан тип уведомления
incomingMessageReceived
,outgoingAPIMessageReceived
,outgoingMessageReceived
. -
В журналах удаленные сообщения будут иметь разные типы
outgoing
иincoming
в зависимости от того кто удалил сообщение: Вы или Ваш собеседник. В журнале будет запись с оригинальным сообщением и полемisDeleted: true
, указывающим, что сообщение было удалено. -
В журнале будут зафиксированы все события удаления сообщений (кто, в каком чате и когда удалил сообщение), также указан
stanzaId
оригинального удаленного сообщения. Оригинальное сообщение из журнала не удаляется, оно меняет поле наisDeleted: true
.