This happens when your bot is configured to use Datafeed 2.0 and has created a datafeed, but was not continuously running for some time so the datafeed became stale.
The BDK will automatically re-create a new datafeed and begin listening on the new one after those log messages. As long as the bot is responding to events like commands, everything is working correctly. If you terminate the bot process and restart it, you will notice that the exception no longer occurs, since your previous ru...
Those instructions are for an actual pod where either you have access to the admin console or you can request for your pod admin to help create a service account for you.
For the Developer Sandbox, you can request for credentials via the welcome email (which you have already done). These are automatically provisioned for you so you do not need to access the admin console on the sandbox. You will then receive another email with your credentials package. Once you have obtained that, simply e...
You can use the INSTANTMESSAGECREATED
event and the USERJOINEDROOM
event for that purpose. Note that the IM created event only fires for the very first time that a bot and a user communicate. It will not fire subsequently even if the user closes the window and returns.
That is how Symphony works with regards to deactivation - the room is as good as hidden. It only appears in search results by room owners who have the option to re-activate the room.
What you are looking for is setting a room to read-only instead. Room owners can do this from the Chat Details pane.
Unfortunately, only inline styles like in your point #1 are currently allowed within the MessageML specification.
One way to mitigate this is to use a templating engine so that style definitions can be reused.
<!-- resources/hello.jinja2 -->
<div style="{{ styles.abc }}">hello</div>
<div style="{{ styles.def }}">goodbye</div>
<div style="{{ styles.abc }}">hello again</div>
from jinja2 import Template
...
@activities.slash("/hello")
async def hello(c...
You can use the ui-action
button element to navigate users to a specific IM or room upon clicking on the button. Refer to documentation for details.
https://docs.developers.symphony.com/building-bots-on-symphony/messages/overview-of-messageml/ui-action-for-your-bots-ui-extensibility/openchat
If what you're asking for is forcefully navigating the user to a chat when a bot sends a message, that is not possible. You can imagine how that will play out if a large number of bots keep doing th...
Your form needs to have multi-submit
enabled.
<form multi-submit="reset">
...
</form>
Please refer to the documentation for more details.
https://docs.developers.symphony.com/building-bots-on-symphony/messages/overview-of-messageml/symphony-elements-1#attributes
-
Yes, it does. This is more straightforward in projects that do not use the Spring integration since you have to explicitly name the configurations and create instances of
SymphonyBdk
. The Spring integration assumes the use of 1 primary bot, so a bit of explicit definition is required. -
No concerns specifically around authentication or datafeed polling, other than both bots sharing the same compute resources. The one thing to note is that you cannot use the default datafeed configura...
I assume this is for your enterprise test pod and not the developer sandbox (develop2.symphony.com).
This looks to be either a configuration issue or an environmental issue.
Can you please verify the individual entries match your on-premise setup:
- Pod hostname
- Key Manager hostname and port
- API Agent hostname and port
- Proxy server hostname, port and credentials
- Truststore contains all signing certs served from the hosts above
If these are all accurate, please contact Symp...
Officially, there is no support for this so you will not be able to get exactly the same format. However, wrapping your table around a div
with class excel-table
offers a similar look with the hover effects in Client 2.0, just without the responsive collapsing behaviour. (Note that this is not part of the documented MessageML specification and thus, is subject to breaking in the future).
<div class="excel-table">
<table>
<thead>
<tr><th>ABC</th><th>DEF</th><th>G...
This is unfortunately not available today, so attachments have to be sent as part of a message rather than a form submission. The file upload element is on the roadmap and we will announce it via the newsletter when it is released.
Congratulations! You should have also gotten a separate digital badge issued on Credly. Please check your email and accept the badge. You can then share that one more easily on your social networks.
You can use the attributes in V2RoomSearchCriteria
to set the search criteria. For free-text search on the room name, just use the query
attribute. You'd then want to verify that the search results are not empty before extracting the room attributes.
V2RoomSearchCriteria criteria = new V2RoomSearchCriteria().query("Deal Room 123");
V3RoomSearchResults results = bdk.streams().searchRooms(criteria);
if (results.getCount() >= 1) {
String roomId = results.getRooms().get(0).ge...
This is now fixed in the 2.2.1 release of the Python BDK
https://github.com/finos/symphony-bdk-python/releases/tag/2.2.1
You can choose to continue using the @slash decorator while splitting your code into multiple classes / files if you like, just that you will still need to instantiate each class in __main__.py
and pass the required BDK services along with ActivityRegistry
.
# __main__.py
from .my_file import MyClass
async def run():
config = BdkConfigLoader.load_from_file(Path.joinpath(current_dir, 'resources', 'config.yaml'))
async with SymphonyBdk(config) as bdk:
d...
I believe you are confusing too many different concepts together. I recommend that you head to the Training Center and review the Fundamentals and Python BDK courses to get a better understanding of how Symphony, bots and extension apps work. That will help you establish what you actually need to implement as part of your required workflow. Feel free to return with specific questions once you have done that.
That is not a supported use-case and it would deliver arguably no benefit as opposed to directly uploading your files. When you use Symphony REST APIs to send a message with an attachment, the message and file data are transmitted and stored encrypted on the Symphony Pod in the cloud. Customers do not get access to the encrypted version of the payloads and there are no APIs to retrieve that. The REST APIs need to work in tandem with the Symphony Clients for any given workflow such that the en...
You can define additional slash command handlers that accept a wildcard regular expression behind to serve as a catch-all.
bdk.activities().register(slash("/Help", false, context -> {
// Regular logic
}));
bdk.activities().register(slash("/Help .*", false, context -> {
// Invalid usage logic
}));
What you should be using is the list_users_by_ids()
method instead of get_user_details()
, which calls an admin-level endpoint that retrieves complete user details instead of just the public profile that you require.
# Normal user lookup endpoint
# https://developers.symphony.com/restapi/reference#users-lookup-v3
await self._users.list_users_by_ids([context.affected_user_id])
# Admin level user details endpoint
# https://developers.symphony.com/restapi/reference#get-us...
When you first registered on the Developer Center, you should have received a welcome email. Within that email, there is a link you can click on to request for sandbox credentials. You will then receive a package that includes the account details, the RSA keys and a sample configuration.
A headless bot as a concept is essentially a script that performs a specific action like sending a message and terminating right after, as opposed to a conversational one that is listening for commands 24/7. So the actual implementation could differ wildly depending on how your architect it.
For example, you could have the bot accept command line arguments representing the stream id and message content, then use an external mechanism to launch the bot when your event triggers. You could al...
Sending and receiving messages is demonstrated numerous times in the BDK 2.0 courses. Please refer to the demos at the end of the chapters. Attachments are an optional field in the Message object, which accepts any type of InputStream. An example using FileInputStream
would look like this:
// Java
Attachment file = new Attachment(new FileInputStream("./data.csv"), "data.csv");
Message msg = Message.builder().attachments(List.of(file)).content("Hello").build();
bdk.messages()....
Hi @<1376257644615962624|Gopal Chettri> looks like there was a delay in processing your course progression this morning. I see that you have now been enrolled onto the BDK for Python course.
You can write a simple headless bot that accepts an incoming webhook and formats the incoming data payload into MessageML that gets sent into a notification room.
When you first registered on the Developer Center, you should have received a welcome email. Within that email, there is a link you can click on to request for sandbox credentials. You will then receive a package that includes the account details, the RSA keys and a sample configuration.
On configuration for the sandbox (develop2.symphony.com), the default port value of 443 is actually correct. Port 8443 is used for certificate authentication that is (as mentioned in the course) deprecated...
Please refer to the following answer to get a basic extension app running.
https://forum.developers.symphony.com/question/1351124750339936256/test-extension-app-in-sandbox#post-1351127220696911872
Once you get the sample running, you can modify app.html / js to include anything you want, including UI frameworks etc. Everything in app.html / js is entirely your implementation so you can include any framework you wish. Obviously, we cannot possibly provide support for Angular itself and any...
Unfortunately, the Extension API does not support this model of different Extension Apps invoking each others' services by design. Some customers have asked for this feature in the past and the product team is continuing to evaluate the ask, so we appreciate your feedback on this as it helps us drive the roadmap.
I assume your market app is a public app available on all Symphony pods. This is controlled centrally by Symphony, so please reach out to support@symphony.com for assistance.
For context, private apps are deployed and controlled by individual pods' administrators so in that scenario, you will need to contact the different companies involved. Symphony is not privy to administrating private apps on customer pods.
Thanks for raising this - we have discovered this to be a bug when we transitioned from Symphony 1.5 to 2.0. One of the parity items that was missed out on. This has been added to the backlog for fixing but we don't have a specific date for when it will be done. Apologies that you will have to find an alternative icon that is neutral to both light and dark themes in the meantime.
Once you pass a qualifying certification exam (Fundamentals does not count), you will receive via email the certificate in PDF format as well as a Credly badge that you can choose to accept and share on your social networks. Please search your email for this message. If you have misplaced it, please reach out at developer.relations@symphony.com so we can assist further.