UCal
  • Welcome
  • 🚀Getting Started
    • Quick Start
      • What is IS-Messenger?
      • Setting Up an Account
      • Connecting Channels
      • Inviting Your Teammates
      • Getting Contacts to Message You
      • Automated Welcome and Away Messages
      • Responding to Messages
      • Glossary of Terms
    • Connecting a Channel
    • Invite your teammates
    • Getting Contacts to Message You
    • Automated Welcome and Away Messages
    • Responding to messages
    • Glossary of Terms
    • Creating a Chatbot
  • ⚙️Workspace Modules
    • Dashboard
    • Inbox
      • Inbox Overview
      • Assignment and closing a conversations
      • Custom Inboxes
      • Interacting with Respond AI Prompts
      • Using AI Assist
    • Contacts
      • Contact Details
      • Contacts Overview
      • Merge Suggestions
      • Contact Activity
      • Contact Channels
      • Contact Import
      • Segments
    • Broadcast
      • Broadcast Overview
      • Managing Broadcasts
    • Workflow
      • Triggers
      • Workflow Step
        • Step: Send a Message
        • Step: Ask a Question
        • Step: Assign To
        • Step: Branch
        • Step: Update Contact Tag
        • Step: Update Contact Field
        • Step: Open Conversation
        • Step: Close Conversation
        • Step: Add Comment
        • Step: Jump To
        • Step: Wait
        • Step: Date & Time
        • Step: HTTP Request
        • Step: Trigger Another Workflow
        • Step: Add Google Sheets Row
        • Step: AI Agent
      • Workflow Templates
    • Reports
      • Reports: Conversations
      • Reports: Responses
      • Reports: Resolutions
      • Reports: Messages
      • Reports: Contacts
      • Reports: Assignments
      • Reports: Leaderboard
      • Reports: Users
      • Reports: Broadcasts
  • ⚙️Workspace Setting
    • Managing a Workspace
    • General
    • Users
      • Access Levels
    • Teams
    • Channels
      • Chat Menus
    • Contact Fields
    • Growth Widgets
      • Website Chat Widget Quick Start
      • Website Chat Widget Overview
      • Workspace Settings: Growth Widgets
      • Install Website Chat Widget on Squarespace
      • Install Website Chat Widget on Joomla
      • Install Website Chat Widget on Wix
      • Install Website Chat Widget on Shopify
      • Install Website Chat Widget on WordPress
      • How to Track Conversation Source from Multiple Websites
    • Respond AI
    • Integrations
      • Dialogflow
        • Dialogflow: Connecting to Dialogflow
        • Dialogflow: Creating a Chatbot
        • Dialogflow : Managing Intents
        • Dialogflow: Parameters
        • Dialogflow: Events
        • Dialogflow: Response Templates
        • Dialogflow: Custom Payloads
        • Dialogflow: Fulfillment Webhook Request
      • E-Commerce & CRM Integrations
        • E-Commerce Integration: Shopify
        • E-Commerce Integration: BigCommerce
        • E-Commerce Integration: WooCommerce
        • E-Commerce Integration: Magento
        • CRM Integration: HubSpot
        • CRM Integration: Salesforce
        • CRM Integration: Pipedrive
        • CRM Integration: ActiveCampaign
      • Zapier
      • Developer API
      • Webhooks
      • Make (formerly Integromat)
    • Closing Notes
    • Snippets
    • Files
    • Data Export
    • Data Import
  • ⚙️User Account
  • Profile
  • User Activity Status
  • Notifications
  • Resetting your Passwords
  • 👨‍👧‍👦CONTACT AND MESSAGES
    • Dynamic Variables
      • Dynamic Variables Overview
      • How to Use Dynamic Variables
    • Contact Search and Custom Inbox
    • Conversations
  • ⚙️MESSAGING CHANNELS
    • Channel Overview
    • Facebook Messenger
      • Facebook Messenger Quick Start
      • Facebook Chat Plugin
      • Private Replies
      • Message Tag
    • Instagram
      • Instagram Overview
      • Instagram Quick Start
    • WhatsApp
      • WhatsApp Business API Quick Start
      • Getting Ready for Inbound Conversations
      • Getting Ready for Promotional Messaging
      • WhatsApp Official Business Account (Green Tick)
      • Grow your WhatsApp Audience by Maximizing Entry Points
      • Get WhatsApp API Account for Government Agencies
      • Meta Business Verification
      • WhatsApp Message Templates
      • WhatsApp Pricing
      • WhatsApp Business Platform (API) Channel Configuration
      • WhatsApp Messaging Limits
      • Meta Product Catalog
      • Change Your WhatsApp Business Display Name
      • Phone Number Migration to IS-Messenger WhatsApp Business API
      • Turn-off WhatsApp Number Two-Step Verification
      • WhatsApp Cloud API
        • Migrating from On-Premises API to Cloud API
        • Migrating from Cloud API to On-Premises API
        • Set up the WhatsApp Echo Bot
        • Load Testing on Cloud API
        • Experiments
        • Webhooks Setup
      • 360Dialog WhatsApp
      • Twillio WhatsApp
      • MessageBird WhatsApp
      • Vonage WhatsApp
      • Phone Number Migration to WhatsApp Cloud API
    • Website Chat Widget
      • Install on WordPress
      • Install on Shopify
      • Install on Wix
      • Install on Squarespace
      • Install Website Chat Widget on Joomla
    • LINE
      • LINE Overview
      • LINE Quick Start
    • Telegram
      • Telegram Overview
      • Telegram Quick Start
    • Viber
      • Viber Overview
      • Viber Quick Start
    • SMS Overview
      • Twilio SMS Quick Start
        • Importing Contacts to Twilio SMS
      • MessageBird SMS Quick Start
      • Vonage SMS Quick Start
    • Twitter Overview
      • Twitter Quick Start
    • WeChat
      • WeChat Overview
      • WeChat Quick Start
    • Google Business Message
    • Email
      • Google Workspace Quick Start
      • Other Email
    • Custom Channel
      • Custom Channel Overview
      • Custom Channel Quick Start
  • New Release Update
  • Support Use Cases
    • How to Identify Contacts by Email and Phone NumberI
    • How to Enrich Customer Data from a CRM or other Business Software
    • How to Route Customers to the Right Team Automatically
    • How to Auto-Assign Customers to a Team or Dedicated Agent
    • How to Send Outbound Support Messages
    • Support: Closing Conversations
    • How to Supervise Your Support Agents
    • How to Analyze Reports for Support
    • How to Send CSAT to Customer and Save Data in Google Sheets or CRMs
  • Handling Inbound Conversations
    • Managing Spam
    • Create Automated Welcome and Away Messages
    • Get Contacts’ Consent for Personal Data Collection
    • Create Automated Chat Menus
    • Collect Contacts’ Emails and Phone Numbers
    • Route Contacts by Shifts
    • Route Contacts by Team Functions
    • Route New & Returning Contacts
    • Route VIP Contacts
    • Assignment Strategy: Automatic Contact Distribution & Load Balancing
    • Assignment Strategy: Unassign Agents after Conversations Closed
  • Capture Conversations
    • How to Streamline Meeting Scheduling via CTC Ads
    • How to Automate Product Info Sharing in Conversations Initiated via CTC Ads
    • How to Track Conversation Source from Multiple Websites
    • How to Route Contacts from CTC Ads to Agents
  • Automate Conversations
    • How to Maximize Customer Service Potential with AI Agent
    • How to Automate Contact Information Collection with AI
    • How to Route Contacts to Preferred AI Agent
    • How to Automatically Qualify Contacts Based on Budget Using AI Agent
    • How to Route Contacts by their Preferred Language
    • How to Create Automated Chat Menus
    • Assignment Strategy: How to Automate Contact Distribution & Load Balancing
    • Assignment Strategy: Unassign Agents after Conversations Closed
    • How to Create Automated Welcome and Away Messages
    • How to Block Contacts and Manage Spam
    • How to Route New and Returning Contacts
    • How to Collect Contacts’ Emails and Phone Numbers
    • How to Route New and Returning Contacts
    • How to Route Contacts by Team Functions
    • How to Route Contacts by Shifts
    • How to Get Contacts’ Consent for Personal Data Collection
    • How to Route VIP Contacts
  • How to Promptly Transfer Conversation Between Agents
  • How to Guide Customers from Exploration to Purchase with Engaging Menus
  • How to Optimize Customer Onboarding with Automated & Customized Welcome Messages
  • Converse with Customers
    • How to Get a Complete View of the Customers
    • How to Simplify Customer Escalation with Automation
    • How to Transfer Contacts to the Next Shift Automatically
    • How to Optimize Agents’ Productivity in the Messages Module
    • How to Align AI Conversations with Your Brand Voice
    • How to Draft Customer Replies with AI
    • How to Convert Image to Text Using AI
    • How Automate Calculations Using AI
  • Broadcasts Use Cases
    • How to Sending a Simple Broadcast
    • How to Start a Workflow Based on Broadcast Response
    • How to Import to Broadcast via WhatsApp
    • How to Troubleshoot a Failed Broadcast
  • Sales Use Cases
    • How to Collect Leads' Email and Phone Number
    • How to Enrich Contact Data and Qualify Leads
    • How to Route Leads
    • How to Auto-Assign Leads to Sales Agents
    • How to Send Outbound Sales Messages
    • How to Track Productivity by Closing Conversations
    • How to Supervise Sales Agents
    • How to Analyze Reports for Sales
  • Accessing Help Menu
Powered by GitBook
On this page
  1. MESSAGING CHANNELS
  2. Custom Channel

Custom Channel Quick Start

Integrate third-party messaging app into IS Messenger

PreviousCustom Channel OverviewNextNew Release Update

Last updated 1 year ago

Connecting a Custom Channel

Step 1: Go to Settings > Channels

Step 2: Click Add Channel > Custom Channel > Connect

Step 3: Enter the destination Webhook URL where outgoing messages will be sent.

Step 4: Select the ID type for the Channel > click Next

ID types are used for user identification and are used to communicate with your custom integration server.

There are two types of IDs available:

  1. Phone Number: Use this if the messaging service provider recognizes Contacts based on their Phone Number.

    1. Sample format: +60177872890

  2. Custom ID: Use this if the messaging service provider recognizes Contacts based on a custom-generated ID.

    1. The maximum character length is 50.

    2. A-Z, a-z, 0-9, _ , =, + , / and @ are allowed.

Step 5: The following dialog will provide the Channel ID, API Token, and Webhook URL e.g.

  1. Channel ID: gfd8g7fd89dgfd

  2. API Token: aaaxczsadzxcasdacxzcasdaaaxczsadzxcasdacxzcasd

  3. Webhook URL: https://app.IS-Messenger/custom/channel/webhook/Using a Phone Number ID type allows you to initiate a conversation and send the first message to a Contact.

Pass Messages to IS-Messenger

Webhook URL is used to post the Messages, Messaging Echoes and Messaging Receipts to the IS-Messenger platform.

The provided code will trigger the webhook on IS-Messenger, creating a Contact if necessary and saving the message under that Contact.

Sample for Messages

curl -X POST \
  https://app.is-global.com/custom/channel/webhook/ \
  -H 'authorization: Bearer aaaxczsadzxcasdacxzcasdaaaxczsadzxcasdacxzcasd' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -d '{
  "channelId": "gfd8g7fd89dgfd",
  "contactId": "+60177872890",
  "events": [
    {
      "type": "message",
      "mId": "xcvzzxcxczxczxc",
      "timestamp": 2132131321000,
      "message": {
        "type": "text",
        "text": "Hello World"
      }
    }
  ],
  "contact": {
    "firstName": "John",
    "lastName": "Doe",
    "profilePic": "<https://static.independent.co.uk/s3fs-public/thumbnails/image/2015/07/08/14/pic.jpg>",
    "countryCode": "MY",
    "email": "john@IS-Messenger",
    "phone": "+60177872890",
    "language": "en"
  }
}'

Sample for Messaging Echoes

curl -X POST \
  https://app.is-global.com/custom/channel/webhook/ \
  -H 'authorization: Bearer aaaxczsadzxcasdacxzcasdaaaxczsadzxcasdacxzcasd' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -d '{
  "channelId": "gfd8g7fd89dgfd",
  "contactId": "+60177872890",
  "events": [
    {
      "type": "message_echo",
      "mId": "xcvzzxcxczxczxc",
      "timestamp": 2132131321000,
      "message": {
        "type": "text",
        "text": "Hello World"
      }
    }
  ],
  "contact": {
    "firstName": "John",
    "lastName": "Doe",
    "profilePic": "<https://static.independent.co.uk/s3fs-public/thumbnails/image/2015/07/08/14/pic.jpg>",
    "countryCode": "MY",
    "email": "john@is-messenger.com",
    "phone": "+60177872890",
    "language": "en"
  }
}'

Sample for Messaging Receipts

curl -X POST \
  https://app.is-global.com/custom/channel/webhook/ \
  -H 'authorization: Bearer aaaxczsadzxcasdacxzcasdaaaxczsadzxcasdacxzcasd' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -d '{
  "channelId": "gfd8g7fd89dgfd",
  "contactId": "+60177872890",
  "events": [
    {
      "type": "message_status",
      "mId": "xcvzzxcxczxczxc",
      "timestamp": 2132131321000,
      "status": {
        "value": "sent|delivered|read|failed",
        "message": "Error: Sending failed due to invalid token"
      }
  ]
}'

Field

Description

Validation

channelId

Unique Channel ID

Required. Unique field. Is generated by IS-Messenger.

contactId

Unique Contact ID

Required. Unique IS-Messenger contact id. Max 50 characters.

events.type

Event Type

Required. Available type: message, message_echo, and message_status.

events.mld

Message ID

Required. Unique message ID. Max 50 characters.

events.timestamp

UNIX Epoch Time (milliseconds)

Required. Time of the event that triggered the callback.

events.message.type

Message Type

Required. Available message types: text, attachment, location and quick_reply. Refer Message Type section for other message type samples.

events.message.text

Message Text

Required. Max length 7,000 characters.

events.status.value

Text

Required if event.type is message_status. Available status values: sent, delivered, read, and failed.

events.status.message

Text

Required if events.status.value is failed.

contact.firstName

First Name

Optional. Max 50 characters.

contact.lastName

Last Name

Optional. Max 50 characters.

contact.profilePic

Profile Pic URL

Optional. Avatar size should be no more than 100 kb. Recommended 720x720.

contact.locale

Locale Code

Optional. Refer here for the list of values.

contact.countryCode

Country Code

Optional. 2 letters country code - ISO ALPHA-2 Code.

contact.timezone

Time Zone

Optional. (min: -24) (max: 24).

contact.email

Email Address

Optional. Max 50 characters.

contact.phone

Phone Number

Optional. Max 18 characters.

contact.language

Language

Optional. ISO 639-1.

Response - Success (HTTP status → 200)

"OK"

Handle Outgoing Messages from IS-Messenger

IS-Messenger will call the endpoint <API Base URL>/message

Ensure you apply the Outgoing Message code on the /message route of your web server.

Here is the cURL example of IS-Messenger calling the endpoint:

curl -X POST \
  <API Base URL>/message \
  -H 'authorization: Bearer aaaxczsadzxcasdacxzcasdaaaxczsadzxcasdacxzcasd' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -d '{
	"channelId": "gfd8g7fd89dgfd",
	"contactId": "+60177872890",
	"message": {
		"type": "text",
		"text": "Hello World"
	}
}'

Response - Success (HTTP status → 200)

{
	"mId": "1640141607842"
}

Authentication needs to happen at the endpoint before sending the message to the Messaging Service Provider.

Here's an example of using an express middleware for this purpose:

const {validationResult} = require('express-validator');

const validateToken = (req, res, next) => {
    const apiToken = <<API Token>>
    const bearerToken = req.headers.authorization;

    if (!bearerToken)
        return res.send(401)

    const token = bearerToken.substring(7, bearerToken.length);

    if (apiToken !== token) {
        return res.send(401)
    }
    next();
};

module.exports = {
    validateToken
};

Messages Type

Sample for Text

{
  "type": "text",
  "text": "Welcome to IS-Messenger",
}

Field

Description

Validation

type

Message Type

Required. text

text

Message Text

Required. Max length 7,000 characters.

Sample for Media File

{
  "type": "attachment",
  "attachment": {
    "type": "image|video|audio|file",
    "url": "https://abc/japan.png",
    "mimeType": "image/png",
    "fileName":"company logo.png",
    "description": "latest company logo"
  }
}

Field

Description

Validation

type

Message Type

Required. attachment.

attachment.type

Attachment Type

Required. Available attachment types: image, video, audio and file.

attachment.url

URL

Required. Max 2,000 characters. Make sure it’s a public link so users or contacts are able to see the content.

attachment.mimeType

Mime Type of the Attachment

Optional

attachment.fileName

File Name

Optional. The File name should include an extension. Max 256 characters (including file extension). Sending a file without an extension or with the wrong extension might cause the contact or user to be unable to open the file.

attachment.description

File Description

Optional. Max 256 characters. Only applicable for attachment.type = image.

Ensure that the attachment URL isn't forcibly downloaded by the browser. The HTTP response's Content-Disposition header should have the default value, which is inline.

Sample for Location

{
  "type": "location",
  "latitude": 0.123456,
  "longitude": -0.1234,
  "address": "Sky Suites, Jalan P. Ramlee, Kuala Lumpur, 50250 Kuala Lumpur, Wilayah Persekutuan Kuala Lumpur"
}

Field

Description

Validation

type

Message Type

Required. location.

latitude

Coordinates

Required. Latitude (±90°) within valid ranges.

longtitude

Coordinates

Required. Longitude (±180°) within valid ranges.

address

Location Address

Optional. Max 256 characters.

Sample for Quick Reply

{
  "type": "quick_reply",
  "title": "Select your preferred language",  
  "replies": [
    "Malay",
    "English"
  ]
}

Field

Description

Validation

type

Message Type

Required. quick_reply.

title

Quick Reply Title

Required. Max 256 characters.

replies

Reply Text

Required. Max 10 replies with max. 256 characters for each reply.

Error Codes

Error (HTTP Status → 4xx)

{
	"error": {
		"message": "Error message"
	}
}

Channel Configuration

Step 1: Click Settings > Channels

Step 2: Locate the Custom Channel > click Manage

Step 3: In the Custom Channel Configuration page you will see the following configurations:

  • Channel Icon - Upload an image that serves as the icon for your Custom Channel.

  • Channel Name - The Channel Name can be changed and is used internally to identify the Channel.

  • Webhook URL for Outgoing message — The webhook URL for outgoing messages to this Channel.

  • Webhook URL for Incoming message — The webhook URL for incoming messages to this Channel.

  • ID Type — These are used for user identification and are used to communicate with your custom integration server.

  • Channel ID — Unique Channel ID to identify your Custom Channel.

  • API Token — A unique identifier used to authenticate a user to access an API.

Step 4: Click Save Changes to update the Custom Channel configuration.

FAQ and Troubleshooting

Can I connect chats from other platforms using a Custom Channel?

Yes, you can. Here are three steps to follow:

  1. In IS-Messenger, input the destination webhook URL from the other platform into the Webhook URL for Incoming message field.

  2. In the other platform, set up a webhook URL pointing to IS-Messenger, allowing Contacts to send messages back to you.

  3. You'll require a Custom Integration Server to interpret APIs from both IS-Messenger and the other platform, enabling message exchange between them.

Make sure to confirm with the other platform that the first two steps are feasible.

We've included an example of a Custom Channel you can test on your server. Check out our GitHub project .

⚙️
here