Skip to Content
Chat apps

Chat interfaces

Put your assistant inside the messaging apps your customers and staff already use: Slack, Microsoft Teams, WhatsApp, Telegram, email, text messages and more. For example, customers text your WhatsApp number about an order and get an answer in seconds, and your staff ask the same assistant questions in Teams.

Connecting a messaging app always has two halves: give almyty the keys the app gave you, and tell the app where to send messages. For many apps almyty does the second half for you. This page walks through both halves for every app.

Deploying a channel on an agent: pick the platform, name it, paste its credentials

Connect a messaging app

  1. Open the assistant, go to its Channels tab, click Add channel and pick the app.
  2. Give almyty the app’s keys: pick a credential you already keep, or click Create one here to add it on the spot. A credential is a saved key or password, stored encrypted on Credentials. The table below says what each app needs.
  3. Click Publish. Where the app needs to be told where to send messages, the page shows a Callback URL with a copy button to paste into the app’s settings. Telegram and the Twilio-based channels (WhatsApp, SMS) are set up for you. Slack leads with Add to Slack: an install link any workspace can use.
  4. Send it a message from the app. If a key is wrong or missing, the channel’s page says so, so you find out before a customer’s message goes unanswered.

From then on, messages go back and forth: the app sends the message to almyty, the assistant answers, and almyty posts the reply back in the app.

A channel on its agent: the callback URL to paste into the platform, next to the settings it needs

What each app needs

AppYou need
SlackA Slack app (client ID, client secret, signing secret) for Add to Slack, or a bot token for one workspace
TelegramA bot token
DiscordA bot token
WhatsApp (Twilio)Your Twilio account SID, auth token and WhatsApp sender number
WhatsApp Cloud (Meta)Access token, phone number ID, verify token and app secret
SMS (Twilio)Your Twilio account SID, auth token and phone number
iMessage (Sendblue)API key ID, API secret key, your Sendblue number and signing secret
iMessage (LoopMessage)API key, inbound token, and optionally a sender name
Microsoft TeamsBot ID and password from an Azure bot registration
Google ChatA webhook URL and verification token
SignalThe address of a signal-cli bridge you run, and a phone number
MatrixYour homeserver address, an access token, and a bridge that forwards room messages
IRCThe address of an IRC bridge you run
EmailA Resend API key (Resend is the email service almyty sends and receives through)
WebhookYour own callback address and a shared secret
Website widgetNothing: add the Website widget channel and paste its line into your site

Every message is checked

Each app proves that a message really came from it, usually with a secret it shares only with you. almyty checks that proof on every incoming message and refuses anything it cannot verify, so nobody can pretend to be your Slack or your WhatsApp number. A channel whose secret has not been set accepts nothing at all.

So a channel does not work until its verification secret is set, and its page names the exact key it is waiting for. If a channel is not receiving messages, check that key first.

Step by step, per app

Each channel’s page shows what that app needs and where to paste almyty’s address. This section is the full copy.

Slack

  1. Create an app at api.slack.com/apps  (from scratch).
  2. Under OAuth & Permissions, add the bot scopes chat:write, app_mentions:read, im:history, files:read (so the assistant can read files people share) and users:read (so it knows who wrote each message in a channel), then install the app to your workspace.
  3. On the channel’s page, under Add to Slack, pick or create the Slack app credential (client ID, client secret, signing secret). For a single workspace, a bot token (starting xoxb-) goes under Advanced instead.
  4. Under Event Subscriptions in Slack, turn events on and paste almyty’s callback URL as the Request URL.
  5. Subscribe to the bot events message.im and app_mention, then save.

Telegram

  1. Message @BotFather  in Telegram, send /newbot, and copy the bot token into the channel’s credential.
  2. That’s it. almyty tells Telegram where to send messages when you publish.

WhatsApp and SMS (Twilio)

  1. Copy the Account SID and Auth Token from the Twilio Console .
  2. Enter the sender number (your WhatsApp sender or SMS phone number).
  3. When you publish, almyty sets your Twilio number to send incoming messages to it.

WhatsApp Cloud (Meta)

  1. Create a Meta app with the WhatsApp product at developers.facebook.com .
  2. Paste the access token, phone number ID, verify token and app secret into the channel’s credential.
  3. In the app’s WhatsApp, Configuration page, paste almyty’s callback URL, with the same verify token.
  4. Subscribe the app to the messages webhook field.

Discord

  1. Create an application and bot at discord.com/developers/applications .
  2. Turn on the MESSAGE CONTENT intent under Bot settings.
  3. Invite the bot to your server with an OAuth2 link that has the bot scope.
  4. Nothing to paste back: almyty connects to Discord itself.

Google Chat

  1. Create a Chat app in the Google Cloud console and set almyty’s callback URL as its HTTP endpoint.
  2. Paste the space’s incoming webhook URL and the verification token into the channel’s credential.

Microsoft Teams

  1. Register a bot in Azure (Bot Framework) and copy the bot ID, password and tenant ID into the channel’s credential.
  2. Set the bot’s messaging endpoint to almyty’s callback URL.

Signal

  1. Run a signal-cli-rest-api  bridge and enter its address and your phone number.
  2. Point the bridge’s receive webhook at almyty’s callback URL.

Matrix

  1. Enter the homeserver address and an access token for the bot account.
  2. Point your Matrix bridge at almyty’s callback URL to forward room messages, sending the incoming token as a Bearer token. Replies go to the room the message came from.

IRC

  1. Run an IRC-to-HTTP bridge and enter the server, port, channel and nick.
  2. Point the bridge’s outgoing webhook at almyty’s callback URL.

Email

  1. Paste a Resend API key and set the reply-from and receiving addresses.
  2. Set up your incoming email route to forward to almyty’s callback URL.

Webhook

  1. Send messages to almyty’s callback URL, signed with the shared secret. Unsigned messages are refused.
  2. Replies are sent to the callback address you set on the channel.

Website widget

The widget is the Website widget channel. Publish it, then paste the line its page shows into your site’s HTML, just before the closing body tag. Nothing else to set up: the widget talks to almyty directly, from the websites you list under Allowed sites on the same page.

The widget’s look

The widget looks like your assistant: its colour, name, greeting, theme and AI disclosure come from the assistant’s branding (or the channel’s own), so it matches the web chat. On the widget’s page you choose where it sits and its button icon, with a live preview of the real widget.

The widget's channel page: the embed line, placement with a live preview, and allowed sites

If you want the assistant to be the whole page, on its own address with your name on it, rather than a bubble in the corner, see the hosted chat app.

Telling people they are talking to an AI

Every channel people talk to has an AI disclosure switch on its page, on by default. While it is on, the first reply in each messaging conversation is preceded by the disclosure line from the assistant’s branding (or the channel’s own), by default:

You are chatting with an AI assistant.

The web chat and website widget show the line under the message box instead. Change the wording under Branding and visitor rules. Turning the switch off needs the white-label option (Enterprise plan): the EU AI Act (Article 50) requires that people are told when they are talking to an AI. See Compliance.

Good to know

  • Signal and IRC need a small bridge program that you run yourself.
  • Rate limits are the app’s own. When an app refuses a message, the error shows on the run instead of being retried blindly.
  • Each channel’s traffic shows in Analytics, and failed deliveries are recorded on the run.
  • A refused incoming message is recorded with the reason, so a wrong secret looks different from a channel nobody has written to yet.
  • How far a run may go once a message arrives is set by run limits.

For developers

How each channel proves a message is genuine, and which key configures it:

ChannelProof checkedConfigure
SlackX-Slack-Signature HMACsigning_secret
TelegramX-Telegram-Bot-Api-Secret-Token, minted for you at registrationautomatic
DiscordThe authenticated gateway websocket; no HTTP endpoint exists to forgenothing
WhatsApp, SMS (Twilio)X-Twilio-Signature over the exact callback URLtwilio_auth_token and webhook_url
WhatsApp Cloud (Meta)X-Hub-Signature-256app_secret
Microsoft TeamsBot Framework JWT, verified against the published JWKSbot_id
Google ChatBearer verification tokenverification_token
EmailSvix signature on the inbound webhookresend_inbound_signing_secret
Signal, Matrix, IRCBearer token from your bridgeinbound_token
Generic webhookHMAC-SHA256 over the bodysecret
Chat widgetNothing. Public by design, bounded by rate limits and the cost capnothing

Twilio signs the exact URL it called, so webhook_url has to match what is set in the Twilio console. Automatic registration fills it in; if you registered the webhook by hand, enter it by hand too.

How each channel receives and sends:

ChannelInboundOutbound
SlackEvents API webhook, request-signature verifiedchat.postMessage
TelegramBot webhook (registered automatically)Bot API sendMessage
DiscordGateway eventsChannel messages
WhatsApp (Twilio)Twilio webhook (registered automatically), X-Twilio-Signature verifiedTwilio Messages API
WhatsApp Cloud (Meta)Meta callback webhook, app-secret verifiedWhatsApp Cloud API
SMS (Twilio)Twilio webhook (registered automatically), X-Twilio-Signature verifiedTwilio Messages API
iMessage (Sendblue)Sendblue receive webhook, sb-signing-secret header checkedSendblue send-message API
iMessage (LoopMessage)LoopMessage webhook, Authorization header checkedLoopMessage send API
Microsoft TeamsBot Framework activities, JWT verifiedBot Framework replies
Google ChatSpace webhook, verification tokenIncoming webhook
Signalsignal-cli REST bridge webhookBridge send API
MatrixBridge webhook, bearer tokenRoom send
IRCIRC-to-HTTP bridge webhookBridge send
EmailInbound MIME parsingResend API
WebhookAny HTTP POST, HMAC-SHA256 verifiedPOST to your callback URL
Chat widgetWidget POSTSSE / polling delivery

Requests that fail verification are rejected, never queued. A message’s round trip: platform, to adapter (verify, normalize), to agent run, back to adapter (format for the platform), to reply.

The website widget line:

<script src="https://<api-host>/gateways/<gateway-id>/widget.js" async></script>