Microsoft Bot Framework bot for viewing traffic cameras.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Microsoft Bot Framework bot for viewing traffic cameras.

Example dialog:

alt tag

Supported Interactions


  • Selects a city/set of traffic cameras to view. Sets this as state in the conversation.
  • Examples:
    • view bay area
    • View the traffic cameras for Seattle


  • Lists the names of all of the cameras for the currently-selected city.
  • Examples:
    • list

(enter a camera name)

  • This is how you view a camera image. The bot keeps an index of a number of alternative names (e.g. variations on "st", "street", etc.) where possible, and uses some heuristics (including a Lucene index) to try and figure out what the user meant.
  • The most reliable way to get a result, obviously, is to enter an exact camera name (case-insensitive).
  • But certain more-conversational styles will often work as well, e.g. "Show me the traffic camera at Sunset Blvd".
  • These are based on the phrase-search query scoring in the Lucene index, so ymmv.
  • If multiple cameras may match, the user is presented with a numbered menu...

enter a camera number from a choice list

  • If the user was presented with a choice list by the bot, they can enter the appropriate integer to view a given camera.
  • The choice list stays in conversational state until another one needs to be presented.

Adding a New CameraDataService

If you have a new set of traffic cameras you would like the bot to support, follow these steps:

  • Look at the existing examples.
  • Create a new class in the Data folder, TrafficCamBot.Data namespace.
  • Extend CameraDataServiceBase. (You may also just implement ICameraDataService, but you'll lose lots of nice stuff like the Lucene index by default).
    • Return a unique name from the Name property. Note that this name should be displayable to the user (i.e. user-friendly and meaningful).
    • In the constructor, call SetCameraNames with a list of all of the camera names your service will understand/support.
    • Implement GetImageUrlForCamera (basically, given the name of one of your cameras, return the appropriate CameraImage structure).
    • Send a pull request.