Utwórz swoją pierwszą skrzynkę agenta
Ten przewodnik realizuje dwukierunkową konwersację: utwórz skrzynkę na inbox.ai, odbierz wiadomość w wątku, przeczytaj ją i odpowiedz. Nie musisz weryfikować domeny ani uruchamiać serwera pocztowego.
1. Utwórz klucz API
W panelu przejdź do Developers > Klucze API i utwórz klucz. W grupie Email włącz zakresy mailbox i mailbox_management. Klucze wyglądają jak bk_us1_... lub bk_eu1_...; region w prefiksie wskazuje hosta API.
Przykład kodu
export BIRD_API_KEY="bk_us1_..."2. Zajmij skrzynkę
Utwórz skrzynkę we współdzielonej domenie inbox.ai. Pomiń część lokalną, a Bird wygeneruje dostępny adres. Polityka odbioru open przyjmuje pocztę, chyba że reguła odbioru ją zablokuje.
const mailbox = await bird.email.mailboxes.create({ display_name: "Support" });
console.log(mailbox.address); // "abc123@inbox.ai"mailbox = client.email.mailboxes.create(display_name="Acme Support")
print(mailbox.id)mailbox, err := client.Email.Mailboxes.Create(context.Background(), bird.EmailMailboxesCreateParams{
DisplayName: bird.Ptr("Support"),
})
if err != nil {
log.Fatal(err)
}
fmt.Println(mailbox.Id, *mailbox.Address)$mailbox = $bird->email->mailboxes->create(
(new MailboxCreate())
->setDisplayName('Acme Support'),
);
echo $mailbox->getId(), ' ', $mailbox->getAddress();bird email mailboxes create \
--display-name 'My Agent' \
--receive-policy opencurl -X POST "https://us1.platform.bird.com/v1/email/mailboxes" \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"display_name": "My Agent",
"receive_policy": "open"
}'Odpowiedź zawiera id skrzynki oraz przypisany address. Wyślij e-mail na ten adres z dowolnego klienta pocztowego, aby następny krok miał co odczytać.
3. Odczytaj wątek
Poczta przychodząca staje się wątkiem w skrzynce. Wyświetl listę wątków, a potem odczytaj wiadomości w pierwszym z nich.

for await (const thread of bird.email.threads.list({ mailbox_id: "mbx_01abc" })) {
console.log(thread.id, thread.subject);
}for thread in client.email.threads.list(mailbox_id="mbx_01krdgeqcxet5s7t44vh8rt9mg"):
print(thread.id, thread.subject)for thread, err := range client.Email.Threads.List(context.Background(), bird.EmailThreadsListParams{}) {
if err != nil {
log.Fatal(err)
}
fmt.Println(thread.Id)
}foreach ($bird->email->threads->list(['mailbox_id' => 'mbx_01krdgeqcxet5s7t44vh8rt9mg']) as $thread) {
echo $thread->getId(), ' ', $thread->getSubject(), "\n";
}bird email threads listcurl -X GET "https://{region}.platform.bird.com/v1/email/threads" \
-H "Authorization: Bearer $TOKEN" \
--url-query "label=urgent" \
--url-query "participant=billing@acme.com" \
--url-query "subject=quarterly invoice" \
--url-query "limit=25"Następnie odczytaj wiadomości tego wątku:
for await (const msg of bird.email.threads.messages.list("thr_01abc")) {
console.log(msg.id, msg.direction);
}for message in client.email.threads.messages.list("thr_01krdgeqcxet5s7t44vh8rt9mg"):
print(message.id, message.subject)for msg, err := range client.Email.Threads.Messages.List(context.Background(), "thr_123", bird.EmailThreadsMessagesListParams{}) {
if err != nil {
log.Fatal(err)
}
fmt.Println(msg.Id, msg.Direction)
}foreach ($bird->email->threads->messages->list('thr_01krdgeqcxet5s7t44vh8rt9mg') as $message) {
echo $message->getId(), ' ', $message->getDirection(), "\n";
}bird email threads messages list <thread-id>curl -X GET "https://{region}.platform.bird.com/v1/email/threads/{thread_id}/messages" \
-H "Authorization: Bearer $TOKEN" \
--url-query "label=unread" \
--url-query "limit=25"Każda wiadomość zawiera kierunek (inbound) oraz id (odebrana wiadomość ma prefiks rem_). Dodaj include=extracted_text, aby wstawić treść bez cytatu: nową zawartość, bez cytowanej historii, którą agent musiałby sam usunąć.
Aby uniknąć odpytywania, zasubskrybuj webhook email_mailbox.message_received. Uruchamia się, gdy wiadomość przychodząca trafi do skrzynki. Zobacz dokumentację zdarzeń.
4. Odpowiedz
Odpowiedz na otrzymaną wiadomość. Użyj jej rem_ ID z kroku 3. Odpowiedź trafia do tego samego wątku i jest wysyłana z adresu Twojej skrzynki:
const reply = await bird.email.threads.messages.reply("thr_01abc", "rem_01xyz", {
text: "Thanks for reaching out!",
});
console.log(reply.id);reply = client.email.threads.messages.reply(
"thr_01krdgeqcxet5s7t44vh8rt9mg", "rem_01krdgeqcxet5s7t44vh8rt9mg",
text="Thanks for reaching out!",
)
print(reply.id)reply, err := client.Email.Threads.Messages.Reply(context.Background(), "thr_123", "rem_456", bird.EmailThreadsMessagesReplyParams{
Text: bird.Ptr("Thanks for reaching out!"),
})
if err != nil {
log.Fatal(err)
}
fmt.Println(reply.Id)$reply = $bird->email->threads->messages->reply(
'thr_01krdgeqcxet5s7t44vh8rt9mg',
'rem_01krdgeqcxet5s7t44vh8rt9mg',
(new EmailThreadMessageReplyRequest())
->setText('Thanks, looking into it now.')
->setReplyAll(true),
);
echo $reply->getId();bird email threads messages reply <thread-id> <message-id> \
--text 'Thanks, confirming we received your request.'curl -X POST "https://{region}.platform.bird.com/v1/email/threads/{thread_id}/messages/{message_id}/reply" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"text": "Thanks, confirming we received your request."
}'Możesz teraz tworzyć skrzynkę, odbierać, czytać i odpowiadać. Aby rozpocząć konwersację zamiast odpowiadać na istniejącą, utwórz nową wiadomość w skrzynce (POST /v1/email/mailboxes/{id}/messages), co otworzy nowy wątek.
Następne kroki
- Skrzynki agentów: jak działają wątki, reguły odbioru, wysyłanie i retencja.
- Serwer MCP: uruchom tę samą pętlę z agenta AI przez serwer MCP.
- CLI: bird email mailboxes i bird email threads dla terminala.
- Szybki start SDK: przewodniki po SDK w Go, Pythonie i TypeScript.
Powiązane zasoby
Kontynuuj z dokumentacją, przewodnikami i przykładami dotyczącymi tego tematu. Zasoby są w języku angielskim.