This is 12th review and I saw we had some questions come in this morning for us to review and go over. I'm not sure Andrew, you had a chance to look at that yet, but we can go ahead and start with those. So I think the first one was around capturing input data from adaptive cards. Okay, so let me just, I might need to do a little bit of experimenting here on that one. Let's see what we've got with. So actually I'll just go and create adaptive card, just a form. Some text, input, italian if Excuse me, you're not sharing if you're, thank you. I'm sorry, I'm sorry, I just jumped right into it. Okay, can you see my screen now? Yes, yep, yep, we can see it. See, I'm just throwing some inputs in here. Let's see, let's just feel odd to me that there isn't just a normal button option here. I guess we will just select. Select. Empty image here, don't really have an image or I'll just repurpose one of the images from the other example. We have for now. Okay, sorry, appropriate image, but it is at least a image that we can click on to submit. Submit our form. So I need just think for a moment. So the expectation in the previous ones is. The action is tied. To the column. The data is submitted. So I'm just going to go ahead and try this out just out of wondering whether or not there's sort of a default data format that gets. Submitted and apologies, that we kind of just need to work through this on the fly. I guess at it, I think last time it's. It is an option that is out there. It's an option that for. You know, whatever reason we. You know, started using less internally. In favor of I think we either had things that were very simply covered by. The sort of adaptive card option like the tile menu. And then options that kind of, you know, or requirements that kind of quickly expanded beyond what it could cover. So we just went with more. More advanced custom directives that we were able to build internally. So. I want your chat. Test form. So it comes in in that case. Okay. Yeah. So it's as simple as that. So if you do not specify anything for the data field here. When specifying the submit action, it looks like it will just come through in the free text value. With the IDs of your inputs and they've associated value. So that's what we're going to do. So we're going to have that point. You know, depending on how you're. Most likely a custom hook. I would think would be the way you want to store it. So similar to sort of our example here where we had that store feedback. And we had we were playing from queer result a query text. In this case. It would be. I'm sure you want me check something here. So this is payload. I think it worth noting that this is coming through as. Which I. That's interesting. It's going through as input unknown. We just look at something quickly with what we go further. What I'm looking for is that I would have expected it to probably come in as the free text. Especially given the. Slot value submitted there. It might be that I don't have an intent listener for free text. So I think it's a specific in the project for no states. Let me just go ahead and do that to. See if it comes through there. And this free text intent is sort of a, it's a built in orbit and tent to cover. Covers open ended input that does not fall under other categories. So. I just just come through and I'm. Intent. Let me see. Let me take a look at the input. If I do specify an event name. I'm not just taking the environment. Hence here. It's called fine input. Well, I'll give it an event name for when dash input. I didn't play to get it out of my club. I think that's interesting. Let me just try one more thing here and then it might need to take this back for more research. I don't know what's happening here. I don't know what's happening here. I'm. Okay, let me go. I'm going to change back to the thing I was just trying to try to create. So there is a particular. I find out someone annoying work about adaptive cards in the context of flow studio. So I went and I made changes. As you can see. And then I did not get the expected result. I was just trying to get the idea of flow. When you're using an adaptive card. No, to actually sort of illustrate here. There's an export import for flow studio flows, which can be helpful in some cases. So here we're looking at the JSON data representing that flow. If we come down here. Here we come down to the adaptive card. And I assume it was for performance reasons that sort of the entire adaptive card directive is loaded into here. But it's going to be aware of is that you know, essentially, once you are using an adaptive card node to bring an adaptive card in, it's kind of frozen in time there. So if I want to reflect the latest version of the adaptive card, I do need to go and read the note in. Yeah, Mark, I kind of forgot about that, but it looks like they never never made that change, right? I think also I think you just go into the node and open it. Save the flow. Yep, that can do it also. That's based on my experience. So that is something to keep in mind and something that maybe is a point in favor of using the alternative route that we described where like you can. Use you could create a hook that uses the adaptive card node in experience as I are because this I don't think would suffer from the same issue there. But okay, so now I've updated my adaptive card with my sort of first attempt, which was just specifying an event name and seeing. Seeing how that worked. So yeah, it did. Okay. So it did. With just this setup of make it back in here. So with just this setup where we have our form, we have our submit. I've specified data as part of the submit action of event name of form input. You can see here that then it did fire that form input intent that I created, but it's still giving the free text value of the string of five JSON representing the form input. And I guess just taking one of more step here to sort of fully build out the example. So the this is the orbit of free text intent it's built in by default. And there is an event name for that a flow message free text event. So it would probably make more sense rather than using a custom form input like this to sort of like more seamlessly fit in with the module. Design to just use the free text intent to capture this input. So I'm going to go back to my adaptive card. I'm going to change the event name here to flow message free text event. I will save it. We'll go back into our flow studio flow. We will try some argue that just like touching it and saving it would be sufficient. Like just open as looking save. Yeah, that's been my experience and then saving the phone. So now I guess let's just fully build out the example here. Okay, so we'll keep our store feedback case that's useful as another example. We'll go down here and we'll create a store. Form input. I think we're looking for message. We're going to work west. And slot stop. Retest value. I'll let raw form input. We'll say that the. Form input. Is parsing that as chase on. And I won't fully build out a schema to store it in, but. Just spit that out. Okay. So I've added that hook in. I'll go add in a custom hook node for store form input. Actually, sorry, we want to be on the other side of this single input that is catching. Or waiting for the form to be submitted. Okay. So now let's go. Refresh one more time. Okay. So you can see now we've come in to here to store form input. We've sort of picked out the form input. And guess what's noting that the event name will be part of that complete object. So I'm probably want to strip that out before saving it. But yeah, so at this point, you would just kind of follow on like we have shown previously where you know you would create whatever schema. You want to store that form data in. You would pick out the data like this. You know, you would set message. payload data to that data set your project ID. And then pass it on to the dynamic data mode to actually create the record. And that pretty much covers covers that approach. Any any questions about any of that. Can you summarize the complete adaptive to card ones? Really sure. Sorry. What was that? Can you please summarize adaptive card? Now what what steps you have done from start to end? Okay. So we'll just go through one more time here. Here the adaptive card. Let's call this test form to does require a description. And so I've brought into the editor. I'm building out form here. So I'm dragging over inputs. There are a few different input types to sort of care to different things like dates, times, et cetera. Forcing it to a number. Each of these inputs is going to need, you know, a unique ID. I was just giving names of input one, but you know, it would make more sense to do, you know, like, first name, last name, whatever. Let's say, you know, Data birth. Let's just save time. I'll just call it input word, but each one and you'll see over here. It does not have unique ID. You'll get this warning. I'll invalid inputs must have a valid unique ID. So I created my inputs. I created. I created an element to serve as the submit button. So like we saw with the tile menu, you know, it could be like an entire column. Basically any element can have a submit action attached to it. It looks like outside of any any of these elements or containers inputs cannot have submit. Attached to them, but other elements can. So for the sake of this example, I just added in an image, grabbed an image from our other one. You know, this image could be an image of us say, you know, submit button type image. Once you have your thing, you want to act as the submit button down in the action. You would choose action dot submit. You would give it that data that we specified of. And this will be a string of vibes or JSON object of event name. And re text whatever the bull. And the text was there from the intent there. If you were using the built in. Three text intent. So it would be this flow message, three text event. Okay, so that's telling that that when this image is clicked on, that's the. Intent that we are firing and submitting the data to. Once you had your form, I'll set in flow studio. And then we have a chain of nodes like this, which is the adaptive card that you want to use. A single input node, a hidden single input node. You do need to enter something for the text. So we just say not applicable. We call it input type text box and hidden. And then we have a custom hook that we have created for storing the input data. And that that's pretty much. And I'm like we showed over here. We had our custom hook created for that. And those are those are the pieces involved in that. So we have a custom hook. Okay. Okay. Was there a next question to move on to. Yes. How can we. Before we move to the next question, I just wanted to check with our team, you know, is it clear? Do you guys have any, you know, clarifying questions about this? Or are you good? Is it clear? Excellent. Thank you. Yeah. And I guess I will just bring up that there is there is an alternative approach for. You know, especially if you're getting into sort of very complex forms that. The inputs available in the adaptive cards wouldn't cover. Where there is a directive that you can specify and orbit at HTML 5 directive. That you can either pass form HTML 2 directly or. You know, you can essentially have a setup where you specify it to sort of show an iframe with a form. And then I think it seems like from the code I've seen from J. You're familiar with like you can serve up HTTP endpoints from. Far within experience designer. So you could. Use that sort of directive. Create a form here in experience designer. With all of your sort of custom markup that you need. You know that form you would then have that submit potentially into. In input in in orbit as well against a bit more complex with regards to. Sort of how you then advance from that form to the next step of the flow. But if you come to a point where you know adaptive cards are not sort of filling your needs. We could we could explore that it's just a bit more. A bit more complicated to pull off so much or make sense to. So I'm not covering almost the the need arises for it. Sounds good. Thank you. Okay. So how can we integrate external APIs. I mean, it depends on. What the API is, but assuming it's just sort of a simple rest API. You know, it would be. Now it would be as simple as. So let's call this. You know, let's call this get patient of data. So let's call this for this next example up. So the approach here would be we'll go on. Look it's out. We'll just go on to the next node and do everything after here. So you can make HDV requests out. To, you know, any really endpoints you want from the experience designer. So what I'll say is form request. I'm going to set some properties here. Message dot URL equals. Let's just say like. Just using this up top my head as like sort of one of our like internal microservices. Endpoints. So here there's a there's like a patient service that I know and grab data from. And then we'll. No payload is required because it's a get request. So we're not actually I'm playing and saying it actually. Let's see to flesh this out a little bit more. Let's. Let's say that I'm going to say that the patient idea is something I'm grabbing from session. Is something that I sort of read and set up when we initially a logical project. We'll say that the URL is that would make the more sense. Is actually going to use that patient ID. So that's part of it. Okay. So similar to sort of those HTTP nodes. So you'll see three HTTP related nodes in experience designer. There's a HTTPM, which is listening for requests for like a page that you're serving up from experience designer. There's the response for you know responding back in that case. And then there's this sort of in line HTTP request node. That you can see in the notes here for this one. It will read from properties that you have set. You can also just sort of hard code values in here, but it more often makes sense to you know set them in the node before. So I was going to say that this is set by the method. The URL left blank will be reading from that message. URL property. The return value it would it would make the most sense to have it as a parse to JSON object assuming that is what your API you're integrating with returns as opposed to you happen to sort of parse about yourself. There are some basic options here around you know. You can specify the SL needs to be used if there is a certificate required you were able to upload that through this little interface. There's also support for basic authentication. If you needed other authentication means like specifying say like some sort of like API key in the header. In the node before you can. You can specify you know. As the show header is equals authorization and you know there are like whatever you're token is that sort of stuff. Yeah, so those are obviously those details are going to depend on you know what the actual API is that you're integrating with. But you have flexibility to pretty much you know change all of the request parameters as you would need to. So that request would then come out and we would go through the sheet your request we would get our response back. So we would go to the next node and then do something similar to what we've seen previously with hooks where we sort of you know let's say do something like with that. Let's just say we're going to store it in session you know that might not be the best idea depending on how large the data is but for now just for the sake of its example we'll say. This is showed over a session of patient data equals message dot payload which is going to be the response that we got back from this endpoint. And then move on and go into the next node and flow manager but yeah the basic answer is that this HTTP request node is going to be the way in which you. Integrate with third party APIs assuming they are you know rest APIs. There are sort of additional communication networking related nodes in experiences on our so we have the HTTP. There is support for you know web sockets. If you for some reason need to do something you know lower level or you know the TCP and you see beauty peanuts I can't say I've actually used them but there's no reason they. Shouldn't function that's just not something that really comes up commonly that you would need to get down to that level. Yes of the big one would be the HTTP nodes for in line. In my requests. And were there any other sort of specific questions around. How to tap into externally PIs of course one other. One other thing to keep in mind is this is all assuming that there are no other networking requirements so this is just assuming that whatever API you are hitting is sort of open for requests from the AWS instances that are organized instances live on. You know we have had situations in the past where you know we need to work with say like setting up a VPN connection. Between like one of our particular customer instances to allow them to access external APIs so it's something that you know we can. Discuss if the need arises but that would be obviously an extra extra effort to get that all set up and running but it is so it is possible. Open key quality. Okay. Any any other questions on that or should we move on to the next topic. No, we can. What was next. Another review or more deeper dive into the version control. Okay, if we're again at what level we covered it last time but I guess just go over it again so. Here are there any specific questions about the version control or anywhere that you'd like and your focus. I can just like another high level review as well. See if I can find. Here's a repository that was set up. Trade. So this system. And it's a sort of full up on internal version on the basis that actually configured for this project. And this was sort of a custom tool. I developed to fill the need. So the way this works is. So it would be configured to deploy points at your project and the sort of different tiers. Say dad stage and prod. Excuse me, we'll need to have to have in prod set up. This sort of configuration is something that we assist with. There are like elements of this that are self serve, but there's a basic initial configuration. And we would need to be involved in. And it would involve you sort of telling us what repository you want to use and then us configuring these different tiers to point to your different. Or that environments and projects. But once it is configured. And you would request a commit preview. And so what this is doing is by default. All of your code experience designer looks something like. This it's just sort of a, you know, rather incomprehensible array of all of the nodes. So we're going to use. Just get it displayed here. So you can see. I guess it's. Strictify. Yeah. So it's a it's a JSON array of them. You know, various. Data for each property, including, you know, what the name is. It's positioning on this grid. And then the more interesting stuff like the actual contents of the function of. So. This tool is going is doing a breakdown of that data into sort of separating it out into folders, 40 tab and the tab ID. And in the area is breaking down the contents of each tab into like JavaScript functions. Get broken out into your own JavaScript file. It still preserves, but sort of sets a size stuff like the display data and the coordinates for each node. So you can sort of more easily ignore that. Since that's something you're probably not that interested in reviewing. Comments get broken out into text files. Additional properties that are not necessarily that interested into breakout. Get broken out into a separate file. And then there's this whole process of sort of deconstructing the data into a form that sort of makes would make more sense for code review purposes. It gets committed to the repository. You know, there are going to be branches for your dev. Stage prod and then main. We do not have a lot of development lines. The typical pattern we would use is we go. We make our changes in dev. It gets checked in. It gets merged into the main branch. You know, we deployed a two-stage to have customers review and then. If they are satisfied with it, we would then deploy out from that main branch to production. And they're we could support other sort of workflows there. through this tool and a sort of branch that you would want to deploy from and your target to deploy to. But so like I said, sort of checking in, there's that process of deconstruction of all of the over the data as well as, you know, pulling in the additional project elements that are covered by version control. So you can see now there's a folder for adaptive cards, flow studio flows, and are covered as well. So you deconstruct it into this format that makes sense for repository and then when you go to deploy, we take all of this and reconstruct it into sort of the format that the platform expects. Anyhow, that's, that is the, that's the basics of it. So yeah, are there and, you know, so this is like our internal tool around it, we created. This utility page that we deploy as a module. So, you know, our internal tool obviously has access to every customer. We don't want that. So you would, you know, we can deploy out a version for you that is specifically limited to sort of tying into your particular projects. And that is. You can see that here. And so obviously not configured, but you would see, you know, if this was configured, you would see the sort of data for. The tiers that is configured to communicate with. And then you would have the options here to sort of do your commit preview and submit, you know, take up snapshot of what we call it with your commit message and everything. And then there is, there's a few additional safety pieces. In here where when we deploy out to say stage or production. Sort of a snapshot will be taken of that environment before the deployment. In case, you know, something goes wrong for some reason or you push up some code that was not meant to go out so you can refer to that. And that's the, that's the basics of the system. Is there anything specific you'd like to dig into deeper? If you want to implement this. So we need to first raise the ticket and make a setup. Right. Yeah, yeah, we will need to assess with the initial setup. Then the setup will be directly from our sandbox to production. And then we can follow the steps which you just told us. Yeah, yeah. Thank you. So this morning. You know, we met with the selection and had discussed that the sandbox environment will need to be upgraded in order to implement this new modular system. So I know that they raised the ticket already, but I thought I'd just bring that up just in case we can expedite that process. I'm sorry, I had a step way for just a second. Can you repeat the question, Daniel? I'm not so much a question, but my understanding is that we had a meeting with intellectuals morning and basically in order for them to start working with the new modular. You know, system, they will need an upgraded sandbox environment. So I know they already raised the ticket in orbit for that, but I just thought I'd bring that up in case. A case that can maybe be expedited, but also just to raise that as a topic in case the team has any questions or if that's something we want to discuss at all. Yeah, I think the environment and Andrew remind me on memories, not that great, but I thought we had set up a sample project in there. And I think the request was for us to upgrade one of the existing projects to help visualize it. So, so, so yeah, I think I'm not sure what makes the most sense is for us to try to take an existing project or makes more sense for the team to try to take one of their projects and use the framework and then we review it. So, I'm not sure what you guys have a perspective on that. Actually, what we want is we want to be a six setup which will help us to understand how from starting what what nodes we need to have. Now, initially, now I think so, Jade has you have modulared a Jade project, but we are not able to we are not able to figure out which node is tackling what how custom is called from the flow manager. What could we need to take from existing project to a new project. We are facing issue over there. That's why we were asking for in one project, which will one new project, which will have an modular approach. So we can practice over there. I see. So, what was I miss some of that what was ex. Yeah, so I think the issues that you know the team is uncertain of how can how the. In the modular format, how some of those hooks and flows work. So I think the the request for the other environment would be to have like a test space. Is that is that correct to dual. Yes. Okay. You all control your own dialogue flow right for Sam sandbox. Sorry. I'm just trying to remember Andrew team on the sandbox environment is the dialogue flow account. I think it's a deer isn't it not ours. So I think it's a little bit more than we can do. I think that's correct. Yeah, I can check, but that that sounds familiar. So, um, so what I'll do is I'll set up a project. You're going to have to set up the dialogue. Do the connection. Do. I'm going to convert a chatbot because I'm not sure I know all the ins and outs of which you guys have got going on. We can set up an example project that uses a flow and does all that stuff. And then. Have you look at that and see how to apply that to use in another project for one of your chatbots. I think that's correct. I think that's correct. I think that's correct. I think that's correct. Okay. Once the project is set up there maybe one in there that we've already tried to set up then I'll send you a email. To set the dialogue flow account and then we can get that wrapped up for next week's call. I think next week will be the last one of the answers all the rest of the month. You're here next Tuesday right hander. No, I'm off. Next Tuesday and the Tuesday after. Okay, so this is the last, this will be the last one for. For you this month. Yeah. Okay, I'll try to get those in by. In the business tomorrow so that you can I'll try to get the project in today with a request in for the dialogue flow will try to get the other project so you can use email questions. And then we can maybe do a call on Thursday and then that will be the last one for the month. Sounds good. Anything else. No, I'm not. Okay. Sounds good. Well, thank you all. Thanks team. Thank you, market Andrew. Everyone. Thank you.