Background on the project:
DB and site hosted on Azure, developing in VS 2015.
I am trying to display all rows for all entries in one of my tables and the output I am getting is different than what I was expecting. I am not sure if it is because of my coding or because of how the table was created or for some other reason I'm not thinking of so any help is appreciated.
Here is my code to pull it from DB(in a file named EmployeesRepository):
public static List<Employee> GetAllEmployees()
{
return dataContext.Employees.ToList();
}
Here is my code to send that data to a controller(in a file named EmployeesController):
[Route("api/employees")]
public HttpResponseMessage Get()
{
var employees = EmployeesRepository.GetAllEmployees();
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, employees);
return response;
}
and here is the angular code to write it out(in my employees.html file):
<table class="table table-striped table-hover" style="width:100%">
<thead>
<tr class="info">
<th ng-click="doSort('username')">Username</th>
<th ng-click="doSort('firstName')">First Name</th>
<th ng-click="doSort('lastName')">Last Name</th>
<th ng-click="doSort('ext')">Extension</th>
<th ng-click="doSort('location')">Location</th>
<th ng-click="doSort('jobtitle')">Job Title</th>
<th> </th>
</tr>
</thead>
<tbody>
<tr ng-repeat="Employee in Employees | filter:textFilter | orderBy:sortBy:reverse">
<td>{{ Employee.username }}</td>
<td>{{ Employee.firstName }}</td>
<td>{{ Employee.lastName }}</td>
<td>{{ Employee.ext }}</td>
<td>{{ Employee.location }}</td>
<td>{{ Employee.jobtitle }}</td>
</tr>
</tbody>
</table>
What it seems to be doing is pulling all foreign keys and creating references for the rest of the data, and angular doesn't know how to output the references. I will provide the JSON output i grabbed from POSTman so you can see whats its doing. The angular correctly identifies 6 objects in my table, and allots 6 rows for the data, but only the first record is displayed, the rest are just blank spaces. Any suggestions as to why its doing this?
[
{
"$id": "1",
"location1": {
"$id": "2",
"employees": [
{
"$ref": "1"
},
{
"$id": "3",
"location1": {
"$ref": "2"
},
"equipments": [
{
"$id": "4",
"employee": {
"$ref": "3"
},
"tickets": [
{
"$id": "5",
"employee": {
"$ref": "3"
},
"employee1": {
"$id": "6",
"location1": {
"$id": "7",
"employees": [
{
"$ref": "6"
}
],
"id": 1,
"locName": "Prime BR Clinic",
"addrss": "1481 Airline Hwy",
"phoneNum": "225-778-0000"
},
"equipments": [],
"tickets": [],
"tickets1": [
{
"$ref": "5"
},
{
"$id": "8",
"employee": {
"$ref": "3"
},
"employee1": {
"$ref": "6"
},
"equipment": {
"$id": "9",
"employee": {
"$ref": "1"
},
"tickets": [
{
"$ref": "8"
}
],
"barcode": "PTR-000000001",
"condition": "InUse",
"assignedTo": "ebeyj",
"notes": "Runs very slow.",
"configDate": "1905-07-03T00:00:00"
},
"id": 3,
"title": "Fake Ticket",
"customer": "landrya",
"barcode": "PTR-000000001",
"assignedTo": "hofmannr",
"category": "Installation",
"importance": "low",
"openDate": "1905-06-05T00:00:00",
"dueDate": "1905-06-05T00:00:00",
"closedDate": "1905-06-05T00:00:00",
"comments": " ",
"condition": "Closed",
"workHours": 99
}
],
"username": "landrya",
"email": "landrya#*****.com",
"lastName": "Landry",
"firstName": "Ashley",
"ext": 4300,
"location": 1,
"jobtitle": "HR Rep"
},
"equipment": {
"$ref": "4"
},
"id": 0,
"title": "Fake Ticket",
"customer": "landrya",
"barcode": "COM-000000001",
"assignedTo": "hofmannr",
"category": "TroubleShoot",
"importance": "low",
"openDate": "1905-06-05T00:00:00",
"dueDate": "1905-06-05T00:00:00",
"closedDate": "1905-06-05T00:00:00",
"comments": "VPNs are a piece of SSH IT",
"condition": "Closed",
"workHours": 99
}
],
"barcode": "COM-000000001",
"condition": "InUse",
"assignedTo": "hofmannr",
"notes": null,
"configDate": "1905-06-20T00:00:00"
}
],
"tickets": [
{
"$ref": "5"
},
{
"$ref": "8"
}
],
"tickets1": [],
"username": "hofmannr",
"email": "hofmannr#******.com",
"lastName": "Hofmann",
"firstName": "Ritchie",
"ext": 5002,
"location": 0,
"jobtitle": "IT GURU"
},
{
"$id": "10",
"location1": {
"$ref": "2"
},
"equipments": [
{
"$id": "11",
"employee": {
"$ref": "10"
},
"tickets": [
{
"$id": "12",
"employee": {
"$ref": "1"
},
"employee1": {
"$ref": "10"
},
"equipment": {
"$ref": "11"
},
"id": 2,
"title": "Imaginary Ticket",
"customer": "mcmorrisv",
"barcode": "MON-000000001",
"assignedTo": "ebeyj",
"category": "TroubleShoot",
"importance": "mid",
"openDate": "1905-06-20T00:00:00",
"dueDate": "1905-06-15T00:00:00",
"closedDate": null,
"comments": null,
"condition": "Open",
"workHours": 0
}
],
"barcode": "MON-000000001",
"condition": "Terminated",
"assignedTo": "mcmorrisv",
"notes": null,
"configDate": "1905-06-17T00:00:00"
}
],
"tickets": [],
"tickets1": [
{
"$ref": "12"
}
],
"username": "mcmorrisv",
"email": "mcmorrisv#******.com",
"lastName": "McMorris",
"firstName": "Vivian",
"ext": 4200,
"location": 0,
"jobtitle": "I am sure she does something around here."
},
{
"$id": "13",
"location1": {
"$ref": "2"
},
"equipments": [],
"tickets": [],
"tickets1": [
{
"$id": "14",
"employee": {
"$id": "15",
"location1": {
"$ref": "2"
},
"equipments": [],
"tickets": [
{
"$ref": "14"
}
],
"tickets1": [],
"username": "xier",
"email": "xier#******.com",
"lastName": "Xie",
"firstName": "Richard",
"ext": 5000,
"location": 0,
"jobtitle": "IT Paladin"
},
"employee1": {
"$ref": "13"
},
"equipment": {
"$id": "16",
"employee": null,
"tickets": [
{
"$ref": "14"
}
],
"barcode": "COM-000000002",
"condition": "StandBy",
"assignedTo": null,
"notes": null,
"configDate": "1905-07-07T00:00:00"
},
"id": 1,
"title": "Pseudo-Ticket",
"customer": "pans",
"barcode": "COM-000000002",
"assignedTo": "xier",
"category": "Special Request",
"importance": "high",
"openDate": "1926-11-02T00:00:00",
"dueDate": "1926-11-02T00:00:00",
"closedDate": null,
"comments": "Developer accused of undocumented code refuses to cmnt",
"condition": "Open",
"workHours": -1
}
],
"username": "pans",
"email": "pans#******.com",
"lastName": "Pan",
"firstName": "Sharon",
"ext": 4100,
"location": 0,
"jobtitle": "Accounts Payable Manager"
},
{
"$ref": "15"
}
],
"id": 0,
"locName": "Prime Corp",
"addrss": "1481 Airline Hwy",
"phoneNum": "225-408-0000"
},
"equipments": [
{
"$ref": "9"
}
],
"tickets": [
{
"$ref": "12"
}
],
"tickets1": [],
"username": "ebeyj",
"email": "ebeyj#******.com",
"lastName": "Ebey",
"firstName": "Joseph",
"ext": 5001,
"location": 0,
"jobtitle": "IT Jedi"
},
{
"$ref": "3"
},
{
"$ref": "6"
},
{
"$ref": "10"
},
{
"$ref": "13"
},
{
"$ref": "15"
}
]
The issue arises because you have shared objects (or potentially shared objects), and then are serializing them to JSON. This article explains it in detail: http://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization.
You should also read: Using JavaScript to deserialize references in a complex object graph from SignalR/Json.NET
Related
I am running this GET API query in Postman - https://[myDomain].atlassian.net/wiki/rest/api/space/ which returns the below results.
However, I'd like to filter out the results to display or return only some specific data, e.g. only the id, key, name, homepage and webui values. How can I achieve this in Postman?
{
"results": [
{
"id": 98430,
"key": "DOC",
"name": "Documents",
"type": "global",
"status": "current",
"_expandable": {
"settings": "/rest/api/space/DOC/settings",
"metadata": "",
"operations": "",
"lookAndFeel": "/rest/api/settings/lookandfeel?spaceKey=DOC",
"identifiers": "",
"permissions": "",
"icon": "",
"description": "",
"theme": "/rest/api/space/DOC/theme",
"history": "",
"homepage": "/rest/api/content/98633"
},
"_links": {
"webui": "/spaces/DOC",
"self": "https://xxxxxx.atlassian.net/wiki/rest/api/space/DOC"
}
},
{
"id": 425986,
"key": "~63be918f98bf50328c68aec2",
"name": "MyDocs",
"type": "personal",
"status": "current",
"_expandable": {
"settings": "/rest/api/space/~63be918f98bf50328c68aec2/settings",
"metadata": "",
"operations": "",
"lookAndFeel": "/rest/api/settings/lookandfeel?spaceKey=~63be918f98bf50328c68aec2",
"identifiers": "",
"permissions": "",
"icon": "",
"description": "",
"theme": "/rest/api/space/~63be918f98bf50328c68aec2/theme",
"history": "",
"homepage": "/rest/api/content/426171"
},
"_links": {
"webui": "/spaces/~63be918f98bf50328c68aec2",
"self": "https://xxxxxx.atlassian.net/wiki/rest/api/space/~63be918f98bf50328c68aec2"
}
},
{
"id": 2064386,
"key": "~5f7af04cb61f66006f28fafc",
"name": "Content Management",
"type": "personal",
"status": "current",
"_expandable": {
"settings": "/rest/api/space/~5f7af04cb61f66006f28fafc/settings",
"metadata": "",
"operations": "",
"lookAndFeel": "/rest/api/settings/lookandfeel?spaceKey=~5f7af04cb61f66006f28fafc",
"identifiers": "",
"permissions": "",
"icon": "",
"description": "",
"theme": "/rest/api/space/~5f7af04cb61f66006f28fafc/theme",
"history": "",
"homepage": "/rest/api/content/2064576"
},
"_links": {
"webui": "/spaces/~5f7af04cb61f66006f28fafc",
"self": "https://xxxxxx.atlassian.net/wiki/rest/api/space/~5f7af04cb61f66006f28fafc"
}
},
{
"id": 98306,
"key": "~5f7aef9c8d88b300751faba5",
"name": "AI Development",
"type": "personal",
"status": "current",
"_expandable": {
"settings": "/rest/api/space/~5f7aef9c8d88b300751faba5/settings",
"metadata": "",
"operations": "",
"lookAndFeel": "/rest/api/settings/lookandfeel?spaceKey=~5f7aef9c8d88b300751faba5",
"identifiers": "",
"permissions": "",
"icon": "",
"description": "",
"theme": "/rest/api/space/~5f7aef9c8d88b300751faba5/theme",
"history": "",
"homepage": "/rest/api/content/98389"
},
"_links": {
"webui": "/spaces/~5f7aef9c8d88b300751faba5",
"self": "https://xxxxxx.atlassian.net/wiki/rest/api/space/~5f7aef9c8d88b300751faba5"
}
},
{
"id": 229380,
"key": "SD",
"name": "Software Development",
"type": "global",
"status": "current",
"_expandable": {
"settings": "/rest/api/space/SD/settings",
"metadata": "",
"operations": "",
"lookAndFeel": "/rest/api/settings/lookandfeel?spaceKey=SD",
"identifiers": "",
"permissions": "",
"icon": "",
"description": "",
"theme": "/rest/api/space/SD/theme",
"history": "",
"homepage": "/rest/api/content/229464"
},
"_links": {
"webui": "/spaces/SD",
"self": "https://xxxxxx.atlassian.net/wiki/rest/api/space/SD"
}
}
],
"start": 0,
"limit": 25,
"size": 5,
"_links": {
"base": "https://xxxxxx.atlassian.net/wiki",
"context": "/wiki",
"self": "https://xxxxxx.atlassian.net/wiki/rest/api/space/"
}
}
IMO, you can't directly filter results to show in postman response tab.
However, you can achieve your goals by 2 work-arounds.
Use visualization function:
Put this code to your Tests tab
var template = `
<table bgcolor="#FFFFFF">
<tr>
<th>id</th>
<th>key</th>
<th>name</th>
<th>homepage</th>
<th>webui</th>
</tr>
{{#each response}}
<tr>
<td>{{id}}</td>
<td>{{key}}</td>
<td>{{name}}</td>
<td>{{_expandable.homepage}}</td>
<td>{{_links.webui}}</td>
</tr>
{{/each}}
</table>
`;
pm.visualizer.set(template, {
response: pm.response.json().results
});
Use logging function:
Put this code to your Tests tab
const res = pm.response.json().results;
res.forEach(e => {
let x = {
"id": e.id,
"key": e.key,
"name": e.name,
"homepage": e._expandable.homepage,
"webuid": e._links.webui
}
console.log(x)
})
Could you please help me understand if we can have multiple array properties in 1 vertex.. For example,
"id": "CU10611973PH",
"label": "Phone-Home",
"type": "vertex",
"properties": {
"PhonePreference": [
{
"id": "c63cf5c9-329b-456e-b94e-0c500587780f",
"value": "Primary"
}
],
"PhoneType": [
{
"id": "11f241d8-8e84-479b-b6a4-aeab7e039665",
"value": "Home"
}
],
"PhoneNumber": [
{
"id": "5795e2ec-6d8c-424c-b42d-f01b587caeca",
"value": "22222222222"
}
],
"pk": [
{
"id": "CU10611973PH|pk",
"value": "pk"
}
]
}
},
{
"id": "CU10611973PC",
"label": "Phone-cell",
"type": "vertex",
"properties": {
"PhonePreference": [
{
"id": "488c54b2-f256-4053-adc5-c07ec2e1a629",
"value": "Primary"
}
],
"PhoneType": [
{
"id": "2f5263e7-f42b-487f-a185-338682a68fdd",
"value": "Cell"
}
],
"PhoneNumber": [
{
"id": "a967516d-986c-4eac-929a-b86824677922",
"value": "123456789"
}
],
"pk": [
{
"id": "CU10611973PC|pk",
"value": "pk"
So here we are having 2 vertex, one for Phone-Home and one for Phone-Cell. Is there a way to make it come under 1 vertex with 2 set of properties .
how can I fetch the name and team_name keys in this API data?
condition: here 18,1,17, etc are subject codes that change according to the subject and not fix this subject available in the next API call.
{
"18": {
"detail": {
"id": "18",
"name": "Hindi"
},
"list": [
{
"id": "5",
"team_name": "Gurpreet",
},
{
"id": "2",
"team_name": "Test1",
}
]
},
"17": {
"detail": {
"id": "17",
"name": "Punjabi"
},
"list": [
{
"id": "6",
"team_name": "Guru",
},
{
"id": "3",
"team_name": "Test",
}
]
},
"1": {
"detail": {
"id": "1",
"name": "History"
},
"list": [
{
"id": "7",
"team_name": "Gurpreet",
}
]
},
"19": {
"detail": {
"id": "19",
"name": "Math"
},
"list": [
{
"id": "4",
"team_name": "Gurpreet",
}
]
},
"status": true
}
Use this code. You can check keys getter to check dynamics key.
import 'dart:convert';
void main() async {
var f = {
"18": {
"detail": {"id": "18", "name": "Hindi"},
"list": [
{
"id": "5",
"team_name": "Gurpreet",
},
{
"id": "2",
"team_name": "Test1",
}
]
},
"17": {
"detail": {"id": "17", "name": "Punjabi"},
"list": [
{
"id": "6",
"team_name": "Guru",
},
{
"id": "3",
"team_name": "Test",
}
]
},
"1": {
"detail": {"id": "1", "name": "History"},
"list": [
{
"id": "7",
"team_name": "Gurpreet",
}
]
},
"19": {
"detail": {"id": "19", "name": "Math"},
"list": [
{
"id": "4",
"team_name": "Gurpreet",
}
]
},
"status": true
};
for (var o in f.keys) {
print(o);
if (f[o] is bool) {
print(f[o]);
} else { // check it is Map. I consider it always is Map
if ((f[o] as Map)['detail'] != null) {
print((f[o] as Map)['detail']['name']);
}
if ((f[o] as Map)['list'] != null) {
print((f[o] as Map)['list'][0]['team_name']); // you can use for here. please check array is not null
}
}
}
}
I'm testing self-service APIs. I wonder if this is a bug:
I make a search request, and the response contains the extra bag information in the flight-offer/price/additionalServices
Then I make the offer price request by adding include=bags parameter in the path of Flight Offers Price API.
However there is no any bags information in the response, neither in the offer/price/additionalServices, nor in the included/.
I still try to create order by adding the extra bag. So I use the extra bag information that I got at step 1 (search response). And the order is created successfully.
It seems that the extra bag information is missing in step 2 (response of flight offer price), is it a bug?
Here is an example of my test to reproduce the issue:
search request
{
"currencyCode": "EUR",
"originDestinations": [
{
"id": "1",
"originLocationCode": "PAR",
"destinationLocationCode": "NYC",
"departureDateTimeRange": {
"date": "2020-08-20",
"time": "10:00:00"
}
}
],
"travelers": [
{
"id": "1",
"travelerType": "ADULT"
}
],
"sources": [
"GDS"
],
"searchCriteria": {
"maxFlightOffers": 3
}
}
Then I select the second offer in the response to make a offer price request using include=bags parameter
{
"type": "flight-offer",
"id": "2",
"source": "GDS",
"instantTicketingRequired": false,
"nonHomogeneous": false,
"oneWay": false,
"lastTicketingDate": "2020-08-13",
"numberOfBookableSeats": 8,
"itineraries": [
{
"duration": "PT8H15M",
"segments": [
{
"departure": {
"iataCode": "ORY",
"terminal": "4",
"at": "2020-08-20T19:45:00"
},
"arrival": {
"iataCode": "EWR",
"terminal": "B",
"at": "2020-08-20T22:00:00"
},
"carrierCode": "TX",
"number": "6720",
"aircraft": {
"code": "359"
},
"operating": {
"carrierCode": "BF"
},
"duration": "PT8H15M",
"id": "3",
"numberOfStops": 0,
"blacklistedInEU": false
}
]
}
],
"price": {
"currency": "EUR",
"total": "149.44",
"base": "41.00",
"fees": [
{
"amount": "0.00",
"type": "SUPPLIER"
},
{
"amount": "0.00",
"type": "TICKETING"
}
],
"grandTotal": "149.44",
"additionalServices": [
{
"amount": "70.00",
"type": "CHECKED_BAGS"
}
]
},
"pricingOptions": {
"fareType": [
"PUBLISHED"
],
"includedCheckedBagsOnly": false
},
"validatingAirlineCodes": [
"TX"
],
"travelerPricings": [
{
"travelerId": "1",
"fareOption": "STANDARD",
"travelerType": "ADULT",
"price": {
"currency": "EUR",
"total": "149.44",
"base": "41.00"
},
"fareDetailsBySegment": [
{
"segmentId": "3",
"cabin": "ECONOMY",
"fareBasis": "ULBCOWFR",
"brandedFare": "EBASIC",
"class": "U",
"includedCheckedBags": {
"quantity": 0
}
}
]
}
]
}
There is no extra bag in the response.
Thanks
I am using bot framework v4. I have developed a chatbot using .Net Core. The bot is integrated with LUIS and Qna Maker. One issue I am facing is that the bot duplicates the message that comes from the user. Please look at the screenshot below:
The replies I get from the bot are perfectly fine. The flow of the bot is as intended. I just cannot figure out why the message from user is being duplicated. I am using DirectLine for this. I will share whatever code part is needed.
{
"activities": [
{
"type": "message",
"id": "BR1wBZw7w2852JMLobk0EC-o|0000000",
"timestamp": "2019-12-02T19:41:57.1284328Z",
"channelId": "directline",
"from": {
"id": "CivicDevBot",
"name": "CivicChat"
},
"conversation": {
"id": "BR1wBZw7w2852JMLobk0EC-o"
},
"attachments": [
{
"contentType": "application/vnd.microsoft.card.adaptive",
"content": {
"type": "AdaptiveCard",
"version": "1.0",
"body": [
{
"type": "Container",
"items": [
{
"type": "ColumnSet",
"columns": [
{
"type": "Column",
"width": "auto",
"items": [
{
"type": "Image",
"size": "large",
"url": "https://i.imgur.com/ViaEUnA.png"
}
]
}
],
"horizontalAlignment": "Center"
},
{
"type": "ColumnSet",
"columns": [
{
"type": "Column",
"width": "auto",
"items": [
{
"type": "TextBlock",
"size": "large",
"weight": "bolder",
"color": "light",
"text": "Welcome to CIVIC Financial Services",
"wrap": true
},
{
"type": "TextBlock",
"size": "large",
"weight": "bolder",
"color": "light",
"text": "I am S.U.E",
"wrap": true
},
{
"type": "TextBlock",
"color": "light",
"text": "I can help you answer your questions. Familiarize yourself with CIVIC Financial Services.",
"wrap": true
},
{
"type": "TextBlock",
"color": "light",
"text": "If you want to talk to a Customer Service Agent, just type \"I want to talk to a Customer Service Agent\".",
"wrap": true
}
],
"separator": true,
"horizontalAlignment": "Left"
}
]
}
]
}
],
"actions": [
{
"type": "Action.Submit",
"data": {
"action": "aboutCivic"
},
"title": "About CIVIC"
},
{
"type": "Action.ShowCard",
"card": {
"type": "AdaptiveCard",
"actions": [
{
"type": "Action.ShowCard",
"card": {
"type": "AdaptiveCard",
"body": [
{
"type": "TextBlock",
"text": "We are open from Monday through Friday from 8:00am to 6:00pm.",
"wrap": true
}
],
"style": "emphasis"
},
"title": "When are you open?"
},
{
"type": "Action.ShowCard",
"card": {
"type": "AdaptiveCard",
"body": [
{
"type": "Image",
"size": "stretch",
"url": "https://i.imgur.com/gBVgI25.png",
"horizontalAlignment": "center"
},
{
"type": "TextBlock",
"text": "AZ, CA, CO, FL, GA, HI, NC, NV, OR, SC, TN, TX, UT, VA & WA",
"wrap": true
}
],
"style": "emphasis"
},
"title": "Do you have an office near me? "
},
{
"type": "Action.ShowCard",
"card": {
"type": "AdaptiveCard",
"body": [
{
"type": "TextBlock",
"text": "8 to 10 days, it all depends on how it takes to get access to the property.",
"wrap": true
}
],
"style": "emphasis"
},
"title": "How quickly can we close? "
}
],
"style": "emphasis"
},
"title": "FAQs"
}
]
}
}
],
"entities": [],
"replyToId": "8WGOnspSxN3"
},
{
"type": "message",
"id": "BR1wBZw7w2852JMLobk0EC-o|0000001",
"timestamp": "2019-12-02T19:43:39.96502Z",
"serviceUrl": "https://directline.botframework.com/",
"channelId": "directline",
"from": {
"id": "r_1575315715",
"name": "",
"role": "user"
},
"conversation": {
"id": "BR1wBZw7w2852JMLobk0EC-o"
},
"textFormat": "plain",
"locale": "en-GB",
"text": "teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"entities": [
{
"type": "ClientCapabilities",
"requiresBotState": true,
"supportsListening": true,
"supportsTts": true
}
],
"channelData": {
"siteDomain": "https://websiteae1.stackblitz.io/"
}
},
{
"type": "message",
"id": "BR1wBZw7w2852JMLobk0EC-o|0000002",
"timestamp": "2019-12-02T19:43:41.7278914Z",
"channelId": "directline",
"from": {
"id": "CivicDevBot",
"name": "CivicChat"
},
"conversation": {
"id": "BR1wBZw7w2852JMLobk0EC-o"
},
"text": "Sorry, I didn't understand. Consider rephrasing your question or contacting a customer agent",
"attachments": [],
"entities": [],
"replyToId": "BR1wBZw7w2852JMLobk0EC-o|0000001"
},
{
"type": "message",
"id": "BR1wBZw7w2852JMLobk0EC-o|0000003",
"timestamp": "2019-12-02T20:00:25.784598Z",
"serviceUrl": "https://directline.botframework.com/",
"channelId": "directline",
"from": {
"id": "r_1575315715",
"name": "",
"role": "user"
},
"conversation": {
"id": "BR1wBZw7w2852JMLobk0EC-o"
},
"textFormat": "plain",
"locale": "en-GB",
"text": "helo",
"channelData": {
"siteDomain": "https://websiteae1.stackblitz.io/"
}
},
{
"type": "message",
"id": "BR1wBZw7w2852JMLobk0EC-o|0000004",
"timestamp": "2019-12-02T20:00:26.5739342Z",
"channelId": "directline",
"from": {
"id": "CivicDevBot",
"name": "CivicChat"
},
"conversation": {
"id": "BR1wBZw7w2852JMLobk0EC-o"
},
"text": "Sorry, I didn't understand. Consider rephrasing your question or contacting a customer agent",
"attachments": [],
"entities": [],
"replyToId": "BR1wBZw7w2852JMLobk0EC-o|0000003"
},
{
"type": "message",
"id": "BR1wBZw7w2852JMLobk0EC-o|0000005",
"timestamp": "2019-12-02T20:00:27.3293896Z",
"serviceUrl": "https://directline.botframework.com/",
"channelId": "directline",
"from": {
"id": "r_1575315715",
"name": "",
"role": "user"
},
"conversation": {
"id": "BR1wBZw7w2852JMLobk0EC-o"
},
"textFormat": "plain",
"locale": "en-GB",
"text": "hello",
"channelData": {
"siteDomain": "https://websiteae1.stackblitz.io/"
}
},
{
"type": "message",
"id": "BR1wBZw7w2852JMLobk0EC-o|0000006",
"timestamp": "2019-12-02T20:00:27.6064185Z",
"channelId": "directline",
"from": {
"id": "CivicDevBot",
"name": "CivicChat"
},
"conversation": {
"id": "BR1wBZw7w2852JMLobk0EC-o"
},
"text": "Hello",
"inputHint": "acceptingInput",
"attachments": [],
"entities": [],
"replyToId": "BR1wBZw7w2852JMLobk0EC-o|0000005"
}
],
"watermark": "6"
}