Автоматизированный Процесс Обработки Сообщений в Inbox

Требования для Запуска Процесса: Operations Hub Professional для доступа к Custom code в workflow в разделе data ops. Private App: Приложение, у которого установлены разрешения на conversations.read.

Описание Работы Процесса:

  1. Триггер на Изменение Даты Последнего Сообщения:
    • При изменении даты последнего сообщения срабатывает триггер на workflow.
  1. Обработка Сообщений в Workflow:

    • В workflow содержится блок с пользовательским кодом, который выполняет запрос к истории переписки в inbox.
    • Ответ на запрос формируется в текстовом формате:
      text
      Отправитель - Текст сообщения
  2. Отправка Сформированного Текста:

    • После обработки текст можно отправить в ассоциированный контакт или любой другой объект.

Пример Кода:

python
import requests

def main(event):
try:
# Извлечение id_t из event
id_t = event.get("inputFields", {}).get("idt")
if not id_t:
return {"error": "idt is missing in the inputFields"}

# Обновление URL с использованием id_t
url = f"https://api.hubapi.com/conversations/v3/conversations/threads/{id_t}/messages"

headers = {
'authorization': 'Bearer ТОКЕН_ИЗ_ВАШЕГО_АППА',
'accept': 'application/json'
}

response = requests.get(url, headers=headers)
print(f"Response status code: {response.status_code}")

if response.status_code != 200:
return {"error": f"Request failed with status code {response.status_code}"}

# Парсим ответ в JSON
messages = response.json()

# Разворачиваем список сообщений
results = messages.get('results', [])[::-1]

# Извлечение text и senders из каждого сообщения
combined_texts = []

for message in results:
text = message.get('text')
senders = message.get('senders', []) # Предполагаем, что это массив
senders_names = [sender.get('name') for sender in senders]

if text and senders_names:
# Формируем строку в формате "sender - text"
combined_texts.append(f"{senders_names[0]} - {text}")

# Объединяем все строки в одну с новой строкой между ними
combined_texts_str = "\n".join(combined_texts)

return {
"outputFields": {
"text": combined_texts_str
}
}

except Exception as e:
return {"error": str(e)}

Что нужно заполнить в самом блоке Custom code