Skip to navigation

Как вести тредовые переписки?

Контекст в многоходовых email-диалогах.

Треды — способ Agent Inbox группировать беседы. Новое письмо агента создаёт тред; ответы попадают в тот же тред с полной историей.

Как это работает

  1. Агент отправляет письмо — создаётся тред
  2. Получатель отвечает — ответ в том же треде
  3. Агент отвечает снова — снова тот же тред
  4. Вся история в одном месте

Треды создаются автоматически по заголовкам Message-ID, In-Reply-To, References.

Список тредов

По ящику

Python
threads = client.inboxes.threads.list(
inbox_id="agent@agentinbox.space"
)
for t in threads.threads:
print(f"Thread: {t.subject} ({t.message_count} messages)")

По всей организации

Python
# Get all threads from every inbox in your organization
all_threads = client.threads.list()

Удобно для супервизоров, аналитики и маршрутизации между агентами.

Полный тред

Python
thread = client.threads.get(thread_id="thread_abc123")
for message in thread.messages:
print(f"From: {message.from_}")
print(f"Subject: {message.subject}")
print(f"Body: {message.text}")

Ответ в треде

Отвечайте на последнее сообщение:

Python
thread = client.threads.get(thread_id="thread_abc123")
last_message = thread.messages[-1]
client.inboxes.messages.reply(
inbox_id="agent@agentinbox.space",
message_id=last_message.message_id,
text="Thanks for your message! Here's what I found...",
html="<p>Thanks for your message! Here's what I found...</p>"
)

Указывайте и text, и html для ответов.

Цитаты в ответах

Поля extracted_text и extracted_html — только новый текст ответа без истории цитирования.

Python
new_content = message.extracted_text
content = message.extracted_text or message.text

Метки и состояние

Python
unreplied = client.inboxes.threads.list(
inbox_id="agent@agentinbox.space",
labels=["unreplied"]
)
for thread in unreplied.threads:
thread_detail = client.threads.get(thread.thread_id)
last_message = thread_detail.messages[-1]
reply_text = your_agent.process(last_message)
client.inboxes.messages.reply(
inbox_id="agent@agentinbox.space",
message_id=last_message.message_id,
text=reply_text,
html=f"<p>{reply_text}</p>"
)
client.inboxes.messages.update(
inbox_id="agent@agentinbox.space",
message_id=last_message.message_id,
add_labels=["replied"],
remove_labels=["unreplied"]
)

Советы

  • Треды сохраняют контекст многоходовых диалогов
  • client.threads.list() — для дашбордов и маршрутизации
  • Метки вроде unreplied, escalated, resolved для состояния
  • Ответ всегда на последнее сообщение в треде