changedInput schema / properties / scenarios / items / properties / assume / properties / actors / description
Previous value: -"actors: who the people of this scenario are when it starts, as a list of { id, workspaceOwner?, tags? }. id is the as_contact id of the person, or \"$SELF\" for the default one. workspaceOwner: true makes that person an owner of the workspace, so {{sysvar|isWorkspaceOwner}} is true for them and false for everyone else; tags are the tag NAMES they carry, as {{sysvar|tags}} lists them. Without it nobody is the owner and nobody has a tag, so an owner-only or tag-only step can only refuse. A tag or an owner is never set with seed_var."New value: +"actors: who the people of this scenario are when it starts, as a list of { id, platformId?, workspaceOwner?, tags? }. id is the as_contact id of the person, or \"$SELF\" for the default one. platformId is an exact numeric Telegram user id for bots that compare a literal id; omit it to derive a stable test id. workspaceOwner: true makes that person an owner of the workspace, so {{sysvar|isWorkspaceOwner}} is true for them and false for everyone else; tags are the tag NAMES they carry, as {{sysvar|tags}} lists them. A tag or an owner is never set with seed_var."
addedInput schema / properties / scenarios / items / properties / assume / properties / httpResponses
Added value: +{
+ "description": "Mock outside HTTP calls for this scenario. These are local responses; no request is sent to the service.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "body": {
+ "description": "JSON body returned to the bot code."
+ },
+ "method": {
+ "description": "Optional uppercase HTTP method to match.",
+ "type": "string"
+ },
+ "networkError": {
+ "description": "Reject the request with this transport error instead of returning an HTTP response.",
+ "type": "string"
+ },
+ "requestBodyContains": {
+ "description": "Optional literal substring required in the outgoing request body.",
+ "minLength": 1,
+ "type": "string"
+ },
+ "status": {
+ "maximum": 599,
+ "minimum": 100,
+ "type": "integer"
+ },
+ "times": {
+ "description": "Answer at most this many matching calls, then use the next fixture.",
+ "exclusiveMinimum": 0,
+ "type": "integer"
+ },
+ "urlPattern": {
+ "description": "Substring of the outgoing URL to match.",
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "urlPattern"
+ ],
+ "type": "object"
+ },
+ "maxItems": 12,
+ "type": "array"
+}
changedInput schema / properties / scenarios / items / properties / steps / description
Previous value: -"Ordered steps, alternating an ACTION with an ASSERTION about the reply to the action right before it. When accepted checks are supplied, use {\"do\":\"expect_check\",\"checkId\":\"<accepted id>\"} for their outcomes; the server selects the observation channel. Optional contains:[\"literal journey value\"] strengthens message/notification checks only. Each step is one object keyed by `do`: {\"do\":\"start\",\"command\":\"/start\"}, {\"do\":\"send\",\"text\":\"...\"}, {\"do\":\"send_media\",\"kind\":\"photo\"|\"video\"|\"audio\"|\"document\",\"caption\":\"...\"}, {\"do\":\"tap\",\"button\":\"<substring of the label>\"}, {\"do\":\"pay\"}, {\"do\":\"abandon_payment\",\"text\":\"...\"}, {\"do\":\"resume_delays\"}, {\"do\":\"simulate_event\",\"event\":\"member_join\"}, {\"do\":\"expect\",\"anyOf\":[\"verbatim fragment the bot really sends\"],\"not\":[\"text that must NOT appear\"]}, {\"do\":\"expect_var\",\"name\":\"<variable handle>\",\"contains\":\"...\",\"changed\":true}, {\"do\":\"seed_var\",\"name\":\"...\",\"value\":\"...\"} (seed_var value \"$SELF\" becomes the simulated user id, for a gate that compares the user id with a stored owner-id variable; a workspace-owner or tag gate is opened with assume.actors, never with seed_var), {\"do\":\"as_contact\",\"id\":\"user_b\"} (every later step acts as a SECOND person — for anything two people do together: one builds or sends, the other sees it; after the switch that person sees what the bot sent them earlier and can tap its buttons, and cannot tap a button on another person's screen), {\"do\":\"expect_peer_message\",\"to\":\"user_b\",\"contains\":\"...\"}. A scenario with no expect / expect_var / expect_peer_message step asserts nothing. At most 15 steps; malformed steps are dropped rather than failing the run."New value: +"Ordered steps, alternating an ACTION with an ASSERTION about the reply to the action right before it. When accepted checks are supplied, use {\"do\":\"expect_check\",\"checkId\":\"<accepted id>\"} for their outcomes; the server selects the observation channel. Optional contains:[\"literal journey value\"] strengthens message/notification checks only. Each step is one object keyed by `do`: {\"do\":\"start\",\"command\":\"/start\"}, {\"do\":\"send\",\"text\":\"...\"}, {\"do\":\"send_media\",\"kind\":\"photo\"|\"video\"|\"audio\"|\"document\",\"caption\":\"...\"}, {\"do\":\"tap\",\"button\":\"<substring of the label>\"}, {\"do\":\"pay\"}, {\"do\":\"abandon_payment\",\"text\":\"...\"}, {\"do\":\"resume_delays\"}, {\"do\":\"simulate_event\",\"event\":\"member_join\"}, {\"do\":\"expect\",\"anyOf\":[\"verbatim fragment the bot really sends\"],\"not\":[\"text that must NOT appear\"]}, {\"do\":\"expect_var\",\"name\":\"<variable handle>\",\"contains\":\"...\",\"changed\":true}, {\"do\":\"seed_var\",\"name\":\"...\",\"value\":\"...\"} (seed_var value \"$SELF\" becomes the simulated user id, for a gate that compares the user id with a stored owner-id variable; a workspace-owner or tag gate is opened with assume.actors, never with seed_var), {\"do\":\"as_contact\",\"id\":\"user_b\"} (every later step acts as a SECOND person — for anything two people do together: one builds or sends, the other sees it; after the switch that person sees what the bot sent them earlier and can tap its buttons, and cannot tap a button on another person's screen), {\"do\":\"expect_peer_message\",\"to\":\"user_b\",\"contains\":\"...\",\"mediaType\":\"IMAGE\"} (mediaType is optional; assert proof photos/files on the same peer message), {\"do\":\"expect_http_request\",\"urlContains\":\"/orders\",\"method\":\"POST\",\"bodyContains\":\"orderId\",\"count\":1} (assert the outgoing request; method, bodyContains and count are optional). A scenario with no expect / expect_var / expect_peer_message step asserts nothing. At most 15 steps; malformed or truncated steps make the scenario an invalid test, never a pass."