Skip to main content

Sample Renderer for Symphony Elements

Project description


SDK renders symphony messages using precompiled Handlebars templates both in bots and in applications.

User Guide

Now, there are several message templates that you can choose:

Name Description
SIMPLE Renders a message in simple format
ALERT Renders a message formatted as an alert
INFORMATION Renders a general information messages
NOTIFICATION Renders a message formatted as a notification
TABLE Renders a collection of objects in the table format
LIST_TEMPLATE Renders a list of values
BUTTON Renders a button element
TEXTFIELD Renders a textfield element
CHECKBOX Renders a checkbox element
TEXTAREA Renders a textarea element
RADIOBUTTON Renders a radio button element
PERSONSELECTOR Renders a person selector element
DROPDOWN_MENU Renders a dropdown menu element
TABLE_SELECT Renders a table element
FORM Renders a form element


Please make sure the following tools are installed:

  • pybars3==0.9.6

Install SDK

$ pip install sms-sdk-renderer-python

How to use

  • Import the sdk:
import sms_sdk_renderer_python.lib.sms_sdk_renderer as SmsRenderer
  • Create a message object like that, for the ALERT template:
alert_data = {
    "title": 'Informaiton Title',
    "content": 'This is a information message',
    "description": 'Information message description'

In the bot

  • In the code, compile your message using the command:
alert_message = SmsRenderer.renderInBot(alert_data, SmsRenderer.smsTypes['ALERT'])
  • Send the message with Symphony API SDK:
self.bot_client.get_message_client().send_msg(msg['stream']['streamId'], alert_message)
  • If you wish to create a form that contains many elements, use the renderForm(message, smsType):

A sample complex_form_data json object:

form_data = {
    "header" : {"title":"Test Form",
                "titleSize": 4,
                "formId": "test_form_id"},
    "body": [{"textfield":{
                "placeholder": "example-placeholder",
                "required": "true",
                "masked": "true",
                "minlength": 1,
                "maxlength": 128
                "placeholder": "example-placeholder",
                "required": "true"
                "checked": "false",
            {"dropdown_menu" : {
            "required": "true",
            "options": [{"value":"value1", "selected":"true", "text":"First Option"},
                        {"value":"value2", "selected":"false", "text":"Second Option"},
                        {"value":"value3", "selected":"false", "text":"Third Option"} ]

                    "header_list": ["H1", "H2", "H3"],
                    "body": [["A1", "B1", "C1"],
                             ["A2", "B2", "C2"],
                             ["A3", "B3", "C3"]],
                    "footer_list": ["F1", "F2", "F3"]
    "footer" : [
        {"button": {
            "name": "example-button",
            "type": "action",
            "text": "Submit"
        {"button": {
            "name": "example-button",
            "type": "reset",
            "text": "Cancel"
    "form": ""


Render using:

SmsRenderer.renderForm(form_data, smsTypes['FORM'])

The output of the above function is:

  <form id="test_form_id">
    <h4>Test Form</h4>
    <text-field name="exmaple-text-field" placeholder="example-placeholder" required="true" masked="true" minlength="1" maxlength="128"></text-field>
    <textarea name="exmaple-text-area" placeholder="example-placeholder" required="true"></textarea>
    <checkbox name="example-name" value="example-value" checked="false">Red</checkbox>
    <select name="dropdown-name" required="true">
          <option value="value1" selected="true">First Option</option>
          <option value="value2" selected="false">Second Option</option>
          <option value="value3" selected="false">Third Option</option>
    <person-selector name="person-selector-name" placeholder="example-placeholder" required="true"/>
        <tr><td>H1</td><td>H2</td><td>H3</td><td><input type="checkbox" name="tablesel-header" /></td></tr>
        <tr><td>A1</td><td>B1</td><td>C1</td><td><input type="checkbox" name="tablesel-header" /></td></tr><tr><td>A2</td><td>B2</td><td>C2</td><td><input type="checkbox" name="tablesel-header" /></td></tr><tr><td>A3</td><td>B3</td><td>C3</td><td><input type="checkbox" name="tablesel-header" /></td></tr>
        <tr><td>F1</td><td>F2</td><td>F3</td><td><input type="checkbox" name="tablesel-header" /></td></tr>
    <button name="example-button" type="action"> Submit</button>
    <button name="example-button" type="reset"> Cancel</button>

In the client application

  • In the code, in the render function of the entity service, compile your message using the command:
compiledMessage = SmsRenderer.renderInApp(myMessageData, SmsRenderer.smsTypes.ALERT);
  • In the same render method, return the message like that:
return {
    template: compiledMessage


Template type names are accessible by SmsRenderer.smsTypes constant, like so:

simpleMessageTemplate = SmsRenderer.smsTypes.SIMPLE;


To get the compiled template in MessageML format, use the functions:

Syntax Parameters Where to use
SmsRenderer.renderInApp() messageData, messageType Extension application
SmsRenderer.renderInBot() messageData, messageType Bot
SmsRenderer.renderForm() messageData, messageType Bot

The complete list of message data object properties can be seen in the test examples:

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for sms-sdk-renderer-python, version 0.1.8
Filename, size File type Python version Upload date Hashes
Filename, size sms_sdk_renderer_python-0.1.8-py3-none-any.whl (15.0 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size sms_sdk_renderer_python-0.1.8.tar.gz (6.4 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page